Pydantic 이란?
pydantic은 Python의 Type Annotations을 활용하여 데이터 유효성을 검사 하는 라이브러리입니다.
- 데이터 모델링: pydantic을 사용하면 데이터 모델을 정의할 수 있습니다. 이 모델은 데이터의 구조, 유형, 제약 조건 등을 정의합니다.
- 데이터 유효성 검사: pydantic은 정의된 모델에 따라 데이터의 유효성을 자동으로 검사합니다. 잘못된 유형의 데이터나 제약 조건을 위반하는 경우 예외를 발생시킵니다.
- 데이터 변환: pydantic은 데이터 유형 간 자동 변환을 지원합니다. 예를 들어 문자열을 날짜 객체로 변환하거나 JSON 데이터를 Python 객체로 변환할 수 있습니다.
- JSON 지원: pydantic은 JSON 데이터를 Python 객체로, Python 객체를 JSON 데이터로 쉽게 변환할 수 있습니다.
- 재사용 가능한 모델: pydantic 모델은 다른 모델에서 상속하거나 포함할 수 있어 코드 재사용성이 높습니다.
- 별표 가져오기: pydantic은 데이터 모델의 필드를 편리하게 가져올 수 있습니다.
- 성능: pydantic은 데이터 유효성 검사와 변환에서 높은 성능을 제공합니다.
pydantic은 주로 웹 애플리케이션, API, 데이터 파이프라인 등에서 사용됩니다. 예를 들어 FastAPI나 Flask 같은 웹 프레임워크와 함께 사용하면 API 입력 데이터의 유효성 검사와 변환을 자동으로 처리할 수 있습니다. 또한 데이터 파이프라인에서 데이터 구조를 정의하고 유효성을 검사하는 데 유용합니다.
BaseModel
pydantic의 핵심 클래스인 BaseModel을 상속하여 데이터 모델을 정의합니다. BaseModel은 데이터 모델의 필드, 유효성 검사, 데이터 변환 등을 제공합니다.
# pydantic의 BaseModel을 상속하여 데이터 모델을 정의
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
- User 클래스는 id, name, email, is_active 필드를 갖는 데이터 모델
- 각 필드의 데이터 유형 지정 (예: id: int, name: str, email: str)
- 기본값 설정 (예: is_active: bool = True)
데이터 유효성 검사
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
user = User(id=1, name='John', email='john@example.com')
print(user) # id=1 name='John' email='john@example.com' is_active=True
# 유효하지 않은 데이터
try:
invalid_user = User(id='a', name=123, email='invalid')
except ValueError as e:
print(e)
- 'is_active'는 생략 되어도 기본값에 의해 True로 설정됩니다.
- 'invalid_user'는 'id'가 문자열, 'name'이 정수로 전달되어 ValueError가 발생합니다.
데이터 변환
from pydantic import BaseModel
from datetime import date
class Person(BaseModel):
name: str
birth_date: date
person = Person(name='Alice', birth_date='1990-01-01')
print(person) # name='Alice' birth_date=datetime.date(1990, 1, 1)
- birth_date는 문자열로 전달되었지만, date 유형으로 자동 변환되었습니다.
Dict 지원
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
user_dict = {"id": 2, "name": "Jane", "email": "jane@example.com"}
user = User(**user_dict)
print(user) # id=2 name='Jane' email='jane@example.com' is_active=True
print(dict(user)) # {"id": 2, "name": "Jane", "email": "jane@example.com", "is_active": true}
'Python' 카테고리의 다른 글
Python - 가상환경(venv) (0) | 2024.03.23 |
---|---|
Python - 비밀번호 해싱 (0) | 2024.03.23 |
Python - typing (0) | 2024.03.22 |
Python - Parameter(매개변수)와 Argument(인자) (0) | 2024.03.18 |
Python - 패킹(Packing), 언패킹(Unpacking) (0) | 2024.03.15 |