[python] SQLAlchemy의 데이터 검증 기능

SQLAlchemy는 Python에서 사용할 수 있는 강력한 ORM(Object-Relational Mapping) 라이브러리입니다. ORM은 데이터베이스와 애플리케이션 사이의 데이터를 변환하고 연결하는 역할을 합니다. SQLAlchemy는 이러한 데이터 변환과 연결 작업을 수행할 때 데이터의 유효성을 검사할 수 있도록 다양한 기능을 제공합니다.

데이터 검증을 위한 Column 타입

SQLAlchemy의 Column 클래스는 데이터베이스 테이블의 열을 나타내는 객체입니다. Column 타입을 사용하여 데이터의 유효성을 검증할 수 있습니다. 예를 들어, 아래의 코드는 문자열 길이가 50자를 넘지 않도록 검증하는 예제입니다.

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

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    name = Column(String(50), nullable=False)

위의 코드에서 name 열의 타입으로 String(50)을 지정하고, nullable=False로 설정하여 데이터가 비어있지 않도록 합니다. 이렇게 설정하면 SQLAlchemy는 데이터를 삽입 또는 업데이트할 때 자동으로 유효성 검사를 수행합니다.

데이터 검증을 위한 커스텀 Validator

SQLAlchemy는 커스텀 Validator를 사용하여 더 복잡한 데이터 검증 규칙을 정의할 수도 있습니다. 예를 들어, 아래의 코드는 이메일 주소의 형식을 검증하는 커스텀 Validator를 정의하는 예제입니다.

from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import validates
from email_validator import validate_email, EmailNotValidError

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    email = Column(String, nullable=False)

    @validates('email')
    def validate_email(self, key, email):
        try:
            v = validate_email(email)
            email = v.email
        except EmailNotValidError as e:
            raise ValueError(str(e))

        return email

위의 코드에서 email 열에 대한 커스텀 Validator인 validate_email 메서드를 정의하였습니다. 이 메서드는 email_validator 라이브러리를 사용하여 이메일 주소의 형식을 검증하는 로직을 구현하고, 검증에 실패할 경우에는 ValueError를 발생시킵니다.

데이터 검증 오류 처리

SQLAlchemy는 데이터 검증 중에 발생하는 오류를 처리하기 위한 다양한 방법을 제공합니다. 예를 들어, 데이터 검증이 실패할 경우에는 ValueError가 발생하고, 이를 애플리케이션에서 적절하게 처리할 수 있습니다. 또는 SQLAlchemy의 ValidationError 클래스를 사용하여 오류를 처리할 수도 있습니다.

from sqlalchemy.exc import ValidationError

user = User(email='invalid_email')
try:
    session.add(user)
    session.commit()
except ValidationError as e:
    print(f"데이터 검증 오류: {str(e)}")

위의 코드는 User 객체를 데이터베이스에 추가하려고 할 때 발생하는 데이터 검증 오류를 처리하는 예제입니다. ValidationError 오류가 발생하면 오류 메시지를 출력합니다.

결론

SQLAlchemy는 데이터의 유효성을 검증하기 위한 다양한 기능을 제공하여 개발자가 데이터베이스와 상호작용할 때 데이터의 일관성과 무결성을 유지할 수 있도록 도와줍니다. Column 타입과 커스텀 Validator를 활용하여 데이터 검증 규칙을 정의하고, 오류 처리를 통해 데이터 검증에 대비할 수 있습니다.

더 자세한 내용은 SQLAlchemy 공식 문서를 참고하세요.