[python] SQLAlchemy-Utils를 사용하여 Soft Deleted 모델 구현하기

소프트 삭제는 데이터를 영구적으로 삭제하지 않고 별도의 플래그나 컬럼을 사용하여 삭제된 상태를 표시하는 기술이다. SQLAlchemy-Utils 라이브러리를 사용하면 간편하게 소프트 삭제를 구현할 수 있다.

1. SQLAlchemy-Utils 설치

먼저 SQLAlchemy-Utils 라이브러리를 설치해야 한다. pip를 사용하여 간편하게 설치할 수 있다.

pip install sqlalchemy-utils

2. Soft Deleted 모델 구현

다음은 SQLAlchemy-Utils 라이브러리를 사용하여 Soft Deleted 모델을 구현하는 예제이다.

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy_utils import Timestamp, soft_deletes

Base = declarative_base()

# 소프트 삭제를 위한 믹스인 클래스 적용
class SoftDeletedModel(Timestamp, soft_deletes.Deletable, Base):
    __abstract__ = True

# 실제 모델 정의
class User(SoftDeletedModel):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String, unique=True)

위의 코드에서 SoftDeletedModel 클래스는 소프트 삭제를 위한 믹스인 클래스로 정의되었다. 그리고 User 클래스는 이 SoftDeletedModel 클래스를 상속받아 정의되었다.

3. Soft Deleted 모델 사용

Soft Deleted 모델을 사용할 때는 삭제되지 않은 데이터만을 조회해야 한다. SQLAlchemy-Utils를 사용하면 소프트 삭제된 데이터를 쉽게 필터링할 수 있다.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import User

engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session = Session()

# Soft deleted되지 않은 사용자만 조회
active_users = session.query(User).filter(User.deleted_at == None).all()

위의 코드에서 User.deleted_at == None 조건을 사용하여 소프트 삭제되지 않은 데이터만을 조회하고 있다.

Soft Deleted 모델을 구현하고 사용함으로써 데이터를 실수로 삭제하는 문제를 방지할 수 있으며, 데이터의 무결성을 유지할 수 있다.

Soft Deleted를 구현할 때 SQLAlchemy-Utils를 사용하면 간편하게 구현할 수 있으며, 복잡한 쿼리 작성 없이 간편하게 소프트 삭제된 데이터를 필터링할 수 있다.