[python] SQLAlchemy에서 트랜잭션을 어떻게 관리하나요?

SQLAlchemy는 파이썬에서 사용되는 강력한 ORM(Object-Relational Mapping) 라이브러리입니다. 데이터베이스 작업을 수행할 때, 트랜잭션은 데이터의 일관성과 안정성을 보장하는 중요한 개념입니다. SQLAlchemy를 사용하여 트랜잭션을 관리하는 방법에 대해 알아보겠습니다.

트랜잭션 생성

SQLAlchemy는 begin() 메서드를 사용하여 트랜잭션을 생성합니다. 이 메서드를 호출하면 새로운 트랜잭션을 시작하고, 트랜잭션의 컨텍스트 매니저를 반환합니다.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 데이터베이스 연결
engine = create_engine('mysql+pymysql://username:password@localhost/mydatabase')
Session = sessionmaker(bind=engine)

# 트랜잭션 시작
with Session().begin() as session:
    # 트랜잭션 내에서 수행할 작업들
    ...

데이터 작업

트랜잭션 내에서 데이터의 추가, 수정, 삭제 작업을 수행할 때는 SQLAlchemy의 세션(Session) 객체를 사용합니다. 세션 객체를 통해 데이터베이스 작업을 수행하면, 트랜잭션 내에서 이루어지게 됩니다.

# 트랜잭션 시작
with Session().begin() as session:
    # 데이터 추가
    obj = MyModel(...)
    session.add(obj)

    # 데이터 수정
    obj.value = new_value

    # 데이터 삭제
    session.delete(obj)

    # 변경 사항 커밋
    session.commit()

예외 처리와 롤백

트랜잭션 내에서 예외가 발생한 경우, 롤백을 통해 이전 상태로 데이터를 되돌릴 수 있습니다. 롤백은 session.rollback() 메서드를 사용하여 수행할 수 있습니다.

# 트랜잭션 시작
with Session().begin() as session:
    try:
        # 데이터 작업 수행
        ...
        # 변경 사항 커밋
        session.commit()
    except:
        # 예외 발생 시 롤백 수행
        session.rollback()
        raise

트랜잭션을 사용하여 데이터베이스 작업을 수행할 때, 데이터의 일관성과 안정성을 유지할 수 있습니다. SQLAlchemy를 사용하면 간편하게 트랜잭션을 관리할 수 있으며, 예외 처리와 롤백을 통해 예외 상황에 대비할 수 있습니다.

참고 자료