[python] SQLAlchemy에서 데이터베이스 제약조건 설정하기

SQLAlchemy는 파이썬으로 작성된 강력한 ORM(Object-Relational Mapping) 라이브러리입니다. 데이터베이스와 애플리케이션을 연결하는 동시에, 데이터베이스의 테이블에 제약조건을 설정할 수 있습니다. 이제 SQLAlchemy를 사용하여 데이터베이스 제약조건을 설정하는 방법을 알아보겠습니다.

고유 제약조건 설정하기

고유(unique) 제약조건은 테이블의 컬럼에 중복된 값을 허용하지 않도록 합니다. SQLAlchemy에서는 UniqueConstraint 클래스를 사용하여 고유 제약조건을 설정할 수 있습니다. 다음은 예제 코드입니다.

from sqlalchemy import Table, Column, String, UniqueConstraint
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(String, primary_key=True)
    username = Column(String)
    email = Column(String, unique=True)

    __table_args__ = (
        UniqueConstraint('username', name='uq_username'),
    )

위의 예제에서 email 컬럼에는 unique=True 인자를 전달하여 고유 제약조건을 설정하였습니다. 또한 __table_args__ 속성을 사용하여 username 컬럼에도 고유 제약조건을 설정하였습니다.

외래키 제약조건 설정하기

외래키(foreign key) 제약조건은 다른 테이블의 값을 참조하는 컬럼이 특정 조건을 충족해야 함을 명시합니다. SQLAlchemy에서는 ForeignKeyConstraint 클래스를 사용하여 외래키 제약조건을 설정할 수 있습니다. 다음은 예제 코드입니다.

from sqlalchemy import Table, Column, String, ForeignKeyConstraint
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(String, primary_key=True)
    username = Column(String)
    email = Column(String)
    role_id = Column(String)

    __table_args__ = (
        ForeignKeyConstraint(['role_id'], ['roles.id'], name='fk_role_id'),
    )

위의 예제에서 role_id 컬럼은 ForeignKeyConstraint 클래스를 사용하여 roles 테이블의 id 컬럼을 참조하는 외래키 제약조건을 설정하였습니다.

참고 문서

이제 SQLAlchemy를 사용하여 데이터베이스 제약조건을 설정하는 방법을 알아보았습니다. 데이터베이스 모델링 및 제약조건 설정은 데이터의 일관성과 정확성을 보장하기 위해 매우 중요한 과정이므로, 잘 이해하고 활용해야 합니다.