본문 바로가기

라이브러리

[파이썬] Pydantic 사용법

Pydantic은 Python 데이터 유효성 검사 라이브러리입니다. Pydantic을 사용하면 Python 데이터 모델에 대한 타입 힌트와 함께 입력 데이터를 자동으로 유효성 검사할 수 있습니다. 이것은 대규모 데이터 유효성 검사를 단순화하고 신뢰성 높은 코드를 작성하는 데 도움이 됩니다.


1. 기본 사용법

 

주로 아래와 같은 상황에서 사용합니다.

  • 타입 힌트 기반 유효성 검사
  • JSON 스키마 생성
  • 쉬운 시리얼화 및 역직렬화
  • 데이터 모델에 대한 기본값 지정
  • 데이터 모델 간 상속
  • 데이터 모델을 사용하여 유형 강제 변환

 

Pydantic을 사용하기 위해서는 다음과 같은 단계를 따르면 됩니다.

 

1) Pydantic 설치


Pydantic은 pip로 설치할 수 있습니다. 다음 명령을 실행하여 설치합니다.

 

pip install pydantic


2) 데이터 모델 정의


Pydantic을 사용하여 데이터 모델을 정의합니다. 데이터 모델은 Python 클래스로 정의되며, 필드는 클래스 변수로 정의됩니다. 각 필드에는 데이터 유형과 유효성 검사 규칙이 지정됩니다.

 

from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int

 

3) 데이터 모델 사용


데이터 모델을 사용하여 입력 데이터를 유효성 검사하고 데이터를 처리할 수 있습니다.

 

data = {"name": "Alice", "age": 25}
person = Person(**data)
print(person.dict())


이 예제에서는 데이터 딕셔너리를 사용하여 Person 클래스의 인스턴스를 만듭니다. 데이터 딕셔너리의 키와 필드 이름이 일치해야 합니다. 인스턴스를 만들 때는 ** 연산자를 사용하여 데이터 딕셔너리를 전달합니다. dict() 메서드를 사용하여 데이터를 딕셔너리로 변환할 수 있습니다.

Person 클래스의 필드 유효성 검사 규칙을 위반하는 경우, Pydantic은 예외를 발생시킵니다.

 

2. 추가 사용법


Pydantic은 다양한 고급 기능과 유틸리티 함수를 제공합니다. 이러한 기능을 사용하여 코드 작성을 단순화하고 유지 보수성을 향상시킬 수 있습니다.


1) 데이터 모델 간 상속


Pydantic에서는 데이터 모델 간 상속을 지원합니다. 이를 사용하여 공통 필드를 정의하는 베이스 클래스를 만들고 이를 상속받는 파생 클래스를 만들 수 있습니다.

 

from pydantic import BaseModel

class PersonBase(BaseModel):
    name: str
    age: int

class PersonCreate(PersonBase):
    password: str

class Person(PersonBase):
    id: int
    is_active: bool = True

    class Config:
        orm_mode = True


이 예제에서는 PersonBase 클래스를 만들고 PersonCreate 클래스와 Person 클래스가 이를 상속합니다. PersonCreate 클래스에는 password 필드가 추가됩니다. Person 클래스에는 id 필드와 is_active 필드가 추가되며, Config 클래스를 사용하여 Pydantic이 SQLAlchemy 모델에 적합한 형식으로 데이터를 변환하도록 지정됩니다.

2) 필드 유효성 검사 규칙


Pydantic에서는 필드 유효성 검사 규칙을 지정할 수 있습니다. 이를 사용하여 필드의 유효성 검사를 자동으로 수행할 수 있습니다.

 

from pydantic import BaseModel, validator

class Person(BaseModel):
    name: str
    age: int

    @validator('age')
    def check_age(cls, v):
        if v < 0:
            raise ValueError('must be greater than zero')
        return v


이 예제에서는 validator 데코레이터를 사용하여 age 필드에 대한 유효성 검사 규칙을 정의합니다. check_age 메서드는 age 필드에 대한 유효성 검사를 수행하며, 값이 0보다 작으면 예외를 발생시킵니다.


3) JSON 스키마 생성


Pydantic에서는 데이터 모델에서 JSON 스키마를 생성할 수 있습니다. 이를 사용하여 API 문서를 자동으로 생성할 수 있습니다.

 

from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int

print(Person.schema_json(indent=2))


이 예제에서는 schema_json 메서드를 사용하여 Person 클래스에서 JSON 스키마를 생성합니다. indent 인수는 JSON 스키마를 들여쓰기하는 데 사용됩니다.