Notice
Recent Posts
Recent Comments
Link
헬창 개발자
FastAPI Pydantic : 데이터 검증 및 설정 본문
데이터를 다루다 보면 사용자가 입력하는 값이 의도한 범위 내에서 유효한지 검증하는 작업이 필수적다.
이를 위해 Python에서는 pydantic이라는 아주 유용한 라이브러리를 제공한다.
Pydantic은 Python에서 데이터 검증 및 설정을 쉽게 할 수 있도록 도와주는 라이브러리이다.
Pydantic은 Python의 타입 힌트를 활용하여 데이터의 유효성을 검사하고, 자동으로 변환하며, 데이터 모델을 정의하는 데 유용하다.
주로 FastAPI와 함께 사용되며, 데이터 모델을 정의하고 검증하는 데 강력한 도구로 기능하다.
Installation
pip install pydantic
Import
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel
데이터 검증
class Movie(BaseModel):
mid: int
genre: str
rate: Union[int, float]
tag: Optional[str] = None
date: Optional[datetime] = None
some_variable_list: List[int] = []
tmp_data = {
'mid' : '1',
'genre' : 'action',
'rate' : 1.5,
'tag' : None,
'date' : '2023-01-03 19:12:11'
}
tmp_movie = Movie(**tmp_data)
print(tmp_movie)
위 코드는 Movie라는 class를 정의했고 해당 class는 pydantic의 BaseModel을 상속해서 활용합니다. BaseModel은 객체를 정의하는 방법을 제공한다.
Movie class를 보면 다음과 같은 특징으로 정의되어 있다.
- mid는 int 타입으로 정의
- genre는 strig 타입으로 정의
- rate는 int와 float 둘 다 가능하도록 정의
- tag는 str인데 기본 값은 None
- date는 datetime 형식인데 기본값은 None
- some_variable_list는 int로 구성된 List인데 기본 값은 비어있는 list ( [] )
이렇게 정의된 Movie에 tmp_data로 정의된 데이터를 제공해보자.
그럼 아래와 같은 결과를 확인할 수 있다.
mid=1 genre='action' rate=1.5 tag=None date=datetime.datetime(2023, 1, 3, 19, 12, 11) some_variable_list=[]
만약 다른 자료형을 넣는다면 어떻게 될까 ?
mid 타입의 선언은 int형인데 데이터 삽입을 str형으로 넣어봤다.
그러면 아래와 같이 “입력은 유효한 정수여야 하며, 문자열을 정수로 구문 분석할 수 없습니다”라는 에러가 발생한다.
Traceback (most recent call last):
File "D:\test\p1.py", line 22, in <module>
tmp_movie = Movie(**tmp_data)
^^^^^^^^^^^^^^^^^
File "D:\main.py", line 193, in __init__
self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for Movie
mid
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='one', input_type=str]
For further information visit https://errors.pydantic.dev/2.8/v/int_parsing
데이터 설정
class Person(BaseModel):
'''
gt : 설정된 값보다 큰
ge : 설정된 값보다 크거나 같은
lt : 설정된 값보다 작은
le : 설정된 값보다 작거나 같은
'''
user_id: int
username: str = Field(min_length=2, max_length=7)
user_age: int = Field(gt=1, le=130)
person_info = {
'user_id': 100,
'username': 'soojin',
'user_age': 12
}
tmp_user_data = Person(**person_info)
print(tmp_user_data.json())
데이터를 출력을 하면 올바르게 나오지만, 만약 올바르지 않은 범위에 데이터를 넣으면, 다음과 같은 에러 메세지를 볼 수 있다.
pydantic.error_wrappers.ValidationError: 2 validation errors for Person
username
ensure this value has at least 2 characters (type=value_error.any_str.min_length; limit_value=2)
user_age
ensure this value is less than or equal to 130 (type=value_error.number.not_le; limit_value=130)
'공부방' 카테고리의 다른 글
WSL 환경 localhost는 통신이 되지만, Host IP는 통신이 안되는 현상 (0) | 2024.12.18 |
---|---|
FastAPI : 파일 처리 (2) | 2024.09.09 |
How much need VRAM by using LLM? (0) | 2024.09.05 |
도메인 특화 언어 모델 구축 어떤 방법이 좋을까? (1) | 2024.09.04 |
FastAPI : LLM 모델 서빙을 위한 API (1) | 2024.09.03 |
Comments