[파이썬] ORM을 사용한 데이터베이스 모델 관리

데이터베이스 모델 관리는 소프트웨어 개발에서 중요한 부분입니다. 데이터베이스에 효과적으로 접근하고 조작할 수 있는 방법을 찾는 것은 개발자에게 큰 도움이 됩니다. 이를 위해 ORM(Object-Relational Mapping)을 사용할 수 있습니다. ORM은 객체 지향 언어와 관계형 데이터베이스 사이의 상호 변환을 자동으로 수행하여 개발자가 직접 SQL 쿼리를 작성할 필요 없이 데이터베이스를 다루는 방식입니다.

Python에서 ORM 사용하기

Python에서는 다양한 ORM 라이브러리가 제공되고 있습니다. 대표적인 라이브러리로는 SQLAlchemy, Django ORM 등이 있습니다. 이러한 ORM 라이브러리를 사용하면 데이터베이스 모델을 쉽게 정의하고, 데이터를 읽고 쓸 수 있습니다.

SQLAlchemy를 사용한 예시

SQLAlchemy는 Python에서 가장 널리 사용되는 ORM 라이브러리 중 하나입니다. 다음은 SQLAlchemy를 사용하여 데이터베이스 모델을 정의하고 데이터를 조작하는 예시입니다.

데이터베이스 연결

먼저, SQLAlchemy를 사용하기 위해 데이터베이스에 연결해야 합니다. 다음 코드는 SQLite 데이터베이스에 연결하는 예시입니다.

from sqlalchemy import create_engine

# SQLite 데이터베이스에 연결
engine = create_engine('sqlite:///mydatabase.db')

데이터베이스 모델 정의

다음으로, 데이터베이스 모델을 정의해야 합니다. SQLAlchemy에서는 클래스를 이용하여 데이터베이스 테이블을 나타냅니다. 클래스의 속성은 테이블의 컬럼을 나타내고, 클래스의 인스턴스는 테이블의 레코드를 나타냅니다. 다음 코드는 간단한 사용자(User) 모델을 정의하는 예시입니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# Base 클래스를 상속받아 데이터베이스 모델 정의
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'  # 테이블 이름
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

데이터 조작

데이터베이스에 데이터를 조작하기 위해서는 SQLAlchemy의 Session을 사용해야 합니다. 다음 코드는 데이터베이스에 새로운 사용자를 추가하는 예시입니다.

from sqlalchemy.orm import Session

# Session 생성
session = Session(bind=engine)

# 새로운 사용자 추가
new_user = User(name='John', age=25)
session.add(new_user)
session.commit()

데이터 조회

검색 또는 필터링된 데이터를 가져오기 위해서는 SQLAlchemy의 Query 객체를 사용합니다. 다음 코드는 사용자 중 나이가 30 이상인 사용자들을 조회하는 예시입니다.

from sqlalchemy.orm import sessionmaker

# Session 생성
Session = sessionmaker(bind=engine)
session = Session()

# 사용자 중 나이가 30 이상인 사용자들 조회
users = session.query(User).filter(User.age >= 30).all()

for user in users:
    print(user.name, user.age)

마치며

ORM을 사용하여 데이터베이스 모델 관리는 개발자가 데이터베이스에 효과적으로 접근하고 조작할 수 있는 강력한 기능입니다. Python에서는 SQLAlchemy를 비롯한 다양한 ORM 라이브러리를 사용할 수 있어 더욱 편리한 데이터베이스 관리를 할 수 있습니다. ORM을 사용하면 SQL 쿼리 작성에 대한 부담을 줄이고, 객체 지향적인 방법으로 데이터베이스를 조작할 수 있으므로 개발 생산성을 향상시킬 수 있습니다.