[python] pydantic - BaseModel

gunny·2024년 4월 1일
0

Python

목록 보기
11/29

Pydantic - BaseModel

  • BaseModel은 Pydantic 라이브러리에서 제공하는 기본 모델 클래스
    이 클래스를 상속하여 데이터 모델을 정의하고, 해당 모델의 필드와 유효성 검사 규칙을 설정할 수 있다.
  • BaseModel을 사용하면 데이터 모델을 정의하고, 해당 모델의 객체를 생성할 때 유효성을 검사할 수 있다.

BaseModel 이 제공하는 기능

  1. 필드 정의 : BaseModel 을 사용하여 각 필드의 데이터 유형과 기타 속성을 정의할 수 있다. 예를 들어 문자열, 정수, 부동 소수점 숫자, 불리언 값 등을 포함해 다양한 데이터 유형을 지원한다.
  2. 기본값 설정 : 필드에 기본값을 지정하여 필수가 아닌 경우 해당 필드를 생략할 수 있다.
  3. 유효성 검사 : 필드에 대한 유효성 검사를 설정할 수 있다. 범위, 길이, 고유성 등의 규칙을 지정해 데이터 유효성을 검사할 수 있다.
  4. 직렬화 및 역직렬화 : Pydantic은 입력 데이터를 모델 객체로 변환하거나 모델 객체를 JSON 또는 다른 형식의 데이터로 변환하는 기능을 제공한다.
  5. 데이터 유효성 검사 : 모델 객체를 생성할 때 입력한 데이터가 유효한지 검사한다. 만약 유효하지 않은 경우 ValidationError가 발생한다.

BaseModel을 사용해 데이터 모델을 정의하기

from pydantic import BaseModel, Field

class User(BaseModel):
	id: int
    name: str
    email: str
    age: int = Field(..., ge=0)
    
# 데이터 유효성 검사 및 객체 생성
user_data = {"id": 1, "name": "John",
"email" : "john@example.com", "age":30}
user = User(**user_data)

print(user)

위 예시에서 'User' 클래스는 BaseModel을 상속받아 사용자 정보를 나타내는 데이터 모델을 정의한다.
필수 필드인 'id', 'name', 'email', 과 선택적으로 지정된 'age' 필드가 있다.(age는 필수적인 필드이기도 하지만 선택적인 필드이기도 하다. 기본값은 지정되어 있지 않아 반드시 값을 제공해야 하지만, 값이 제공되지 않을 경우 0이사의 값이 자동으로 할당된다.) 'age' 필드에는 0 이상인 값을 갖는지 확인하는 유효성 검사 규칙이 설정되어 있다.
데이터 유효성 검사를 위해 'User' 클래스를 사용해 객체를 생성할 때 입력된 데이터가 모델의 정의에 따라 유효한지 자동으로 검사된다.

필수 필드, 선택적 필드

  • 필수 필드 : 기본값을 설정하지 않음. 초기화할 때 반드시 값을 제공해야 함
    이를 통해 필드가 필수적임을 나타낸다.
  • 선택적 필드 : 필드의 기본값을 설정함. 선택적 필드는 초기화할 때 값을 제공하지 않아도 기본값이 자동으로 할당된다. 이를 통해 필드가 선택적임을 알 수 있다.
from pydantic import BaseModel

class Order(BaseModel):
	user_name: str
    address: str
    phone_number: str
    itmes: list
    
    email: str = None
    delivery_note: str = None
    payment_method: str = None
 

위의 Order 클래스는 주문 정보를 나타내는 데이터 모델을 정의한다.
사용자 이름, 주소, 전화번호, 주문한 상품 목록은 필수 필드로 정의되어 있다.
그 외에 이메일, 배송 메모, 결제 수단은 선택적 필드로 정의되어 있는데 이 필드들은 초기화할 때 값을 제공하지 않아 기본값으로 None이 할당된다.

Field(..., ge=0)

  • ge 는 Pydantic의 Field 클래스에서 사용되는 유효성 검사 규칙 중 하나이다. 'greater than or equal'의 약어로 주어진 값 이상이어야 함을 나타낸다.
    즉, 필드의 값이 특정값 기준 이상이어야 유효하다는 것을 의미한다.

예를 들어 Field(..., ge=0)은 해당 필드의 값이 0이상여야 유효하다는 것을 나타낸다. 즉, 음수나 0보다 작은 값은 유효하지 않다.

from pydantic import BaseModel

class User(BaseModel):
	id: int
    name: str
    eamil: str
    age : int = Field(..., ge=0)

위 코드에서는 'age' 필드가 0이상의 값이여야 유효하고, 이는 음수값이거나 0보다 작은 값이 입력되는 것을 방지한다.

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글