티스토리
Pydantic 데이터 유효성 검사와 설정 구문 분석
Pydantic은 데이터 유효성 검사와 설정 구문 분석을 간편하게 수행할 수 있게 해주는 Python 라이브러리입니다. 주로 데이터 모델을 정의하고, 입력 데이터의 유효성을 검사하며, JSON 형태의 데이터를 Python 객체로 변환하는 데 사용됩니다. 다음은 Pydantic의 주요 특징과 사용법에 대한 간략한 설명입니다:
1. 주요 특
선언적 모델 정의:
Pydantic을 사용하면 간단한 Python 클래스를 정의하여 데이터 모델을 선언할 수 있습니다.
자동 유효성 검사:
Pydantic은 모델의 필드에 대한 유효성 검사를 자동으로 수행합니다. 이는 데이터를 모델에 할당할 때 자동으로 유효성을 확인하여 오류를 방지합니다.
기본값 및 타입 변환:
필드에 기본값을 설정하거나, 자동으로 타입 변환을 수행할 수 있습니다.
설정 파싱:
Pydantic 모델은 설정 파일과 같은 데이터를 파싱하고 사용하기 용이합니다.
JSON 시리얼라이제이션 및 디시리얼라이제이션:
Pydantic 모델은 JSON 데이터로 쉽게 변환할 수 있으며, 그 반대로도 가능합니다.
ORM과 호환:
Pydantic 모델은 SQLAlchemy, Django ORM 등과 함께 사용할 수 있어 데이터베이스 모델과의 통합이 용이합니다.
2. 코드리뷰
데이터 모델 설정 코드 :
from pydantic import BaseModel
class User(BaseModel):
id: int
username: str
email: str
모델 인스턴스 생성 및 유효성 검사:
user_data = {"id": 1, "username": "john_doe", "email": "john@example.com"}
user = User(**user_data)
자동 유효성 검사 및 타입 변환:
invalid_user_data = {"id": "not_an_integer", "username": "john_doe", "email": "john@example.com"}
invalid_user = User(**invalid_user_data) # 유효성 검사 오류 발생
Pydantic을 사용하여 데이터 모델링 및 유효성 검사를 할 때, 정상적인 경우와 유효성 검사 오류가 발생하는 경우에 대한 간단한 예제를 제공합니다.
정상적인 경우:
from pydantic import BaseModel, Email
class User(BaseModel):
id: int
username: str
email: Email
# 정상적인 사용자 데이터
user_data = {"id": 1, "username": "john_doe", "email": "john@example.com"}
user = User(**user_data)
print(user.dict())
# 출력: {'id': 1, 'username': 'john_doe', 'email': 'john@example.com'}
유효성 검사 오류가 발생하는 경우:
# 잘못된 사용자 데이터 (id가 문자열)
invalid_user_data = {"id": "not_an_integer", "username": "john_doe", "email": "john@example.com"}
try:
invalid_user = User(**invalid_user_data)
except ValueError as e:
print(f"유효성 검사 오류: {e}")
# 출력: 유효성 검사 오류: 1 validation error for User
# id
# value is not a valid integer (type=type_error.integer)
위의 두 예제에서 볼 수 있듯이, Pydantic은 모델 정의에 따라 데이터를 검사하고 타입 변환을 수행합니다. 정상적인 경우에는 모델을 성공적으로 생성하고, 유효성 검사 오류가 있는 경우에는 ValueError 예외가 발생합니다.
User(**invalid_user_data)에서 ** 구문은 Python의 "unpacking" 또는 "dictionary unpacking" 구문입니다. 이는 딕셔너리의 키-값 쌍을 함수의 인수로 전달할 때 사용됩니다.
여기서 **invalid_user_data는 딕셔너리 invalid_user_data의 키-값 쌍을 풀어서 인수로 전달하는 역할을 합니다. 즉, User(**invalid_user_data)는 다음과 같이 해석됩니다.
User(id="not_an_integer", username="john_doe", email="john@example.com")
이것은 Pydantic 모델 User를 만들고자 하는데, 유효성 검사 오류가 발생하는 데이터를 인스턴스화하려는 시도를 나타냅니다. Pydantic은 이러한 경우에 유효성 검사 오류를 감지하고 해당 오류를 발생시킵니다.
즉, User(**invalid_user_data)는 User 클래스의 인스턴스를 생성하려는 시도를 나타내며, 이때 invalid_user_data 딕셔너리의 내용을 해당 인스턴스의 초기 값으로 전달하게 됩니다.
만약 **를 사용하지 않으면, 딕셔너리를 하나의 인수로 전달하게 됩니다. 그러면 Pydantic이 예상하는 형식과 일치하지 않아 유효성 검사 오류가 발생할 수 있습니다.
실제로는 User 클래스의 id 필드에 딕셔너리가 전체적으로 할당되기 때문에 Pydantic이 원하는 형식과 다릅니다. **를 사용하면 딕셔너리의 키-값을 개별적으로 전달하게 되어 Pydantic이 이를 제대로 처리할 수 있습니다.
따라서 User(**invalid_user_data)는 딕셔너리를 언패킹하여 User 클래스에 전달하는 것을 의미합니다. 이는 Pydantic이 모델의 필드에 정의된 형식에 따라 각각의 값을 검증하고 할당하게끔 해줍니다.
마무리
- 이번 포스팅은 pydantic에 대해 알아봤습니다.
궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.
'PYTHON 파이썬' 카테고리의 다른 글
파이썬 우선 순위 큐 (1) | 2024.01.06 |
---|---|
[pypi] pip install package , 내가 만든 라이브러리,모듈 등록하기. (2) | 2024.01.02 |
파이썬에서 에러 처리 하기 , try except 구문 (2) | 2023.12.31 |
Python 삼항 연산자 간결하고 효과적인 코드 작성 방법 (0) | 2023.12.31 |
파이썬 가상 환경 생성, python venv (0) | 2023.12.30 |