파이썬 vars() 함수: 객체 속성을 다루는 도구
vars() 함수란?
vars() 함수는 파이썬 내장 함수 중 하나로,
객체의 속성(attribute)들을 딕셔너리(Dictionary) 형태로 반환하는 함수이다.
vars() 함수는 객체의 이름을 인자로 받고, 해당 객체의 속성들을 딕셔너리 형태로 반환한다.
객체가 클래스의 인스턴스인 경우, vars() 함수는 인스턴스의 속성들을 딕셔너리로 반환한다.
클래스 자체를 인자로 넘겨주는 경우에는 클래스의 속성들을 딕셔너리로 반환한다.
vars() 함수 예시
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person1 = Person("Alice", 30)
# 객체 person1의 속성들을 딕셔너리로 반환
attributes_dict = vars(person1)
print(attributes_dict)
출력결과
{'name': 'Alice', 'age': 30}
vars() 함수는 person1 객체의 속성들인 name과 age를 딕셔너리 형태로 반환했다.
vars() 함수 활용 방법
SQLAlchemy
SQLAlchemy는 파이썬에서 데이터베이스를 다루기 위한 강력한 라이브러리로,
객체 관계 매핑(Object-Relational Mapping, ORM)을 지원하여 객체와 데이터베이스를 쉽게 연동할 수 있다.
SQLAlchemy를 사용하다 보면, DB에서 검색한 결과를 Python의 객체로 다루는 경우가 많다.
이때 vars() 함수를 활용하면 객체의 속성을 쉽게 확인하고 조작할 수 있다.
vars() 함수를 활용하여 객체 속성을 간편하게 다루는 방법에 대해 알아보자.
다음은 SQLAlchemy를 사용하여 DB에서 검색한 결과를 Python 객체로 변환하는 예제이다.
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pandas as pd
# MySQL 연결 정보 설정
db_url = 'mysql+mysqlconnector://username:password@hostname/database_name'
engine = create_engine(db_url)
# 테이블 정의
Base = declarative_base()
class CompanyInfo(Base):
__tablename__ = 'company_info'
id = Column(Integer, primary_key=True)
company_code = Column(String(50))
company_addr = Column(String(200))
# 다른 컬럼들도 여기에 추가
# 테이블 생성
Base.metadata.create_all(engine)
# SQLAlchemy Session 생성
Session = sessionmaker(bind=engine)
session = Session()
# DB에서 검색한 결과를 Python 객체로 변환
query_result = session.query(CompanyInfo).all()
# 변환된 객체를 딕셔너리로 반환하여 리스트에 담음
data_dict = [vars(item) for item in q]
# Dictionary 데이터를 DataFrame으로 변환
company_info = pd.DataFrame(data_dict)
# DataFrame으로 변환된 데이터 확인
print(company_info)
위 예제를 간략히 설명하자면
1. DB CompanyInfo 테이블의 모든 데이터를 가져와서,
2. Python 객체의 리스트인 query_result에 저장하고,
3. query_result에 있는 각 객체의 속성들을 var() 함수로 딕셔너리로 반환해서 리스트에 담는다.
5. 마지막으로 딕셔너리가 담긴 리스트를 pandas DataFrame으로 변환한다.
마무리
vars함수를 SqlAlchemy와 함께 적절히 사용하면 데이터를 효과적으로 다룰 수 있다.
'# Language > Python' 카테고리의 다른 글
[Python] 파이썬의 메모리 할당과 관리 (0) | 2023.07.27 |
---|---|
[Python] 파이썬 입력 함수 비교: input() VS sys.stdin.readline() (0) | 2023.07.25 |
[Python] 파이썬 Type Annotation / Type Hinting (0) | 2023.03.24 |
[Python] 파이썬 에러 핸들링: Exceptions (0) | 2023.01.26 |