All about

SQLAlchemy에서 column의 데이터에 대한 특정한 형식을 강제하려면, CheckConstraintserver_default와 같은 방법을 사용하여 데이터의 유효성을 검증하고, 필요에 따라 변환을 수행할 수 있습니다.

예를 들어, CheckConstraint 사용하여 정규 표현식을 이용해 유효성을 검증하는 방법은 다음과 같습니다.

from sqlalchemy import Column, String, create_engine, CheckConstraint
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class MyTable(Base):
    __tablename__ = 'my_table'
    
    user_id = Column(String(36), nullable=False, server_default='', comment="User ID")
    
    # 유효성 검증을 위한 정규 표현식
    __table_args__ = (
        CheckConstraint("user_id ~ '^[a-f0-9-]{36}$'", name='valid_user_id_format'),
    )

# SQLite 메모리 데이터베이스를 사용하도록 설정
engine = create_engine('sqlite:///:memory:')

# 테이블 생성
Base.metadata.create_all(engine)

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

# 실패하는 경우
new_data = MyTable(user_id='invalid_format')
session.add(new_data)

try:
    session.commit()
except Exception as e:
    print(f"Error: {e}")
    session.rollback()

# 성공하는 경우
new_data = MyTable(user_id='valid-format-12345')
session.add(new_data)
session.commit()

# 검증된 데이터베이스 확인
result = session.query(MyTable).first()
print(result.user_id)

 

이 예에서는 CheckConstraint를 사용하여 user_id 값이 특정한 정규 표현식에 맞는지 확인합니다. server_default는 이 필드에 값을 할당할 때 기본값을 설정하는 데 사용됩니다.

이렇게 함으로써 특정한 형식의 문자열이 저장되도록 있습니다. 다만, 이러한 방식은 데이터베이스 엔진에 따라 지원 여부가 다를 있습니다. 특히, SQLite 경우 정규 표현식을 지원하지 않을 있습니다. 경우에 따라서는 애플리케이션 레벨에서 데이터의 유효성을 체크해야 있습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading