SQLAlchemy는 파이썬에서 ORM(Object-Relational Mapping)을 위한 강력한 도구입니다. ORM을 사용하면 데이터베이스 테이블과 파이썬 클래스 간의 매핑 관계를 쉽게 정의할 수 있으며, SQL 쿼리를 직접 작성할 필요 없이 객체 지향적인 방식으로 데이터를 다룰 수 있습니다. 이번 블로그 포스트에서는 SQLAlchemy에서 서브클래스와 상속을 사용하여 데이터베이스의 테이블 간의 관계를 모델링하는 방법에 대해 알아보겠습니다.
상속 관계 모델링
상속 관계를 이해하기 위해 예시로 Person
과 Employee
라는 두 개의 테이블을 가진 데이터베이스를 생각해봅시다. Person
은 모든 사람의 공통 속성을 나타내고, Employee
는 Person
에 추가적인 속성을 가지고 있습니다. 이런 경우, Employee
는 Person
을 상속받는 서브클래스로 모델링할 수 있습니다.
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
name = Column(String(50))
class Employee(Person):
__tablename__ = 'employee'
id = Column(Integer, primary_key=True)
salary = Column(Integer)
위의 코드에서는 Person
클래스와 Employee
클래스를 SQLAlchemy의 declarative_base
를 상속받는 방식으로 정의하였습니다. 각 클래스는 데이터베이스 테이블을 나타내며, __tablename__
속성을 통해 테이블 이름을 정의하였습니다. Person
테이블은 id
와 name
속성을 가지고 있으며, Employee
테이블은 추가로 salary
속성을 가지고 있습니다.
상속 관계 활용
이제 Person
과 Employee
클래스를 사용하여 데이터베이스의 테이블을 다루는 방법을 알아보겠습니다.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
person = Person(name='John Smith')
session.add(person)
employee = Employee(name='Jane Doe', salary=5000)
session.add(employee)
session.commit()
위의 코드에서는 SQLAlchemy의 create_engine
함수를 사용하여 데이터베이스를 연결하고, Base.metadata.create_all
메서드를 호출하여 클래스를 기반으로 테이블을 생성합니다. sessionmaker
를 사용하여 세션을 생성하고, session.add
를 통해 객체를 데이터베이스에 추가한 뒤 session.commit
을 호출하여 저장합니다.
상속 관계를 활용하면 Person
클래스를 사용하여 Employee
테이블을 다룰 수 있습니다. 이는 코드의 재사용성과 일관성을 높여줍니다.
결론
SQLAlchemy를 사용하여 상속 관계를 모델링하면 데이터베이스의 테이블 간의 관계를 효율적으로 표현할 수 있습니다. 서브클래스와 상속을 활용하여 코드의 재사용성을 높이고 일관성 있는 데이터베이스 모델을 유지할 수 있습니다. SQLAlchemy의 강력한 ORM 기능을 활용하여 데이터베이스 작업을 쉽고 편리하게 처리할 수 있습니다.
References:
- SQLAlchemy Documentation: https://docs.sqlalchemy.org/
- SQLAlchemy Core Tutorial: https://docs.sqlalchemy.org/en/14/tutorial/index.html