[python] SQLAlchemy-Utils를 사용하여 데이터베이스에서 히스토리 로깅하기
데이터베이스의 변경 이력을 추적하고 관리하는 것은 매우 중요합니다. SQLAlchemy-Utils는 이러한 데이터베이스 히스토리 로깅을 위한 유용한 도구를 제공합니다. 이 툴을 사용하면 데이터베이스의 각 변경 사항을 로깅하고 시간에 따라 추적할 수 있습니다.
SQLAlchemy-Utils란?
SQLAlchemy-Utils는 SQLAlchemy를 보완하기 위한 확장 패키지로, 다양한 유틸리티 및 추가 기능을 제공합니다. 이를 사용하면 데이터베이스 모델링 및 상호작용을 보다 효율적으로 처리할 수 있습니다.
데이터베이스 히스토리 로깅 설정하기
먼저 SQLAlchemy-Utils를 설치합니다.
pip install sqlalchemy-utils
다음으로, SQLAlchemy 모델에서 히스토리 로깅을 활성화하기 위해 history
컬럼을 추가합니다.
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy_utils import Timestamp, create_hybrid_property
from sqlalchemy_utils.types import UUIDType
import uuid
from datetime import datetime
Base = declarative_base()
class User(Base, Timestamp):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
uuid = Column(UUIDType(binary=False), default=uuid.uuid4)
name = Column(String(50))
created_at = create_hybrid_property(lambda self: datetime.utcnow())
updated_at = create_hybrid_property(lambda self: datetime.utcnow())
def __repr__(self):
return f"<User(name='{self.name}')>"
위의 예시에서 Timestamp
클래스를 이용하여 created_at
와 updated_at
컬럼에 대한 자동 관리를 설정하고, UUIDType
을 사용하여 uuid
컬럼을 생성합니다.
변경 사항 로깅하기
이제 변경 사항을 로깅하려면 SQLAlchemy-Utils의 changeset
을 사용하여 변경 내용을 추적할 수 있습니다.
from sqlalchemy_utils import changeset
user = User(name='Alice')
with changeset(User, user) as user_changeset:
user.name = 'Bob'
print(user_changeset.added)
print(user_changeset.modified)
print(user_changeset.deleted)
위 코드에서는 changeset
을 사용하여 user
객체의 변경 내용을 추적하고 있습니다. 이를 통해 변경된 값, 추가된 값 및 삭제된 값에 대한 정보를 얻을 수 있습니다.
결론
SQLAlchemy-Utils를 사용하여 데이터베이스 히스토리 로깅을 설정하고, 변경 사항을 추적하는 방법에 대해 살펴보았습니다. 이를 통해 데이터베이스의 변경 이력을 체계적으로 관리할 수 있고, 데이터 무결성 유지에 도움이 될 것입니다.