Pydantic 모델 생성
sql_app/schemas.py
SQLAlchemy 모델 과 Pydantic 모델 간의 혼동을 피하기 위해 SQLAlchemy 모델 이 있는 파일
models.py과schemas.pyPydantic 모델이 있는 파일이 있습니다.
이 Pydantic 모델은 "스키마"(유효한 데이터 모양)를 어느 정도 정의합니다.
따라서 둘 다 사용하는 동안 혼동을 피하는 데 도움이 됩니다.
초기 Pydantic model/ schemas 생성
데이터를 생성 하거나 읽는 동안 공통 속성
ItemBase을 갖도록UserBasePydantic 모델 (또는
"스키마"라고 함)을 생성합니다.
그리고 생성에 필요한 추가 데이터(속성)ItemCreate와UserCreate함께 (동일한 속성을 가짐) 상속합니다. 따라서 사용자는 생성할 때도 갖게password됩니다.
그러나 보안을 위해password다른 Pydantic 모델 에는 포함되지 않습니다. 예를 들어 사용자를 읽을 때 API에서 전송되지 않습니다.
from typing import Union
from pydantic import BaseModel
class ItemBase(BaseModel):
title: str
description: Union[str, None] = None
class ItemCreate(ItemBase):
pass
class Item(ItemBase):
id: int
owner_id: int
class Config:
orm_mode = True
class UserBase(BaseModel):
email: str
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool
items: list[Item] = []
class Config:
orm_mode = True
python 3.10이상
from pydantic import BaseModel
class ItemBase(BaseModel):
title: str
description: str | None = None
class ItemCreate(ItemBase):
pass
class Item(ItemBase):
id: int
owner_id: int
class Config:
orm_mode = True
class UserBase(BaseModel):
email: str
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool
items: list[Item] = []
class Config:
orm_mode = True
SQLAlchemy 모델은 '='를 사용하여 칼럼의 유형을 매개변수로 전달한다.
name = Column(String)
# Pydantic 모델은 새로운 유형 주석 구문/유형 힌트를 사용하여 유형을 선언한다.
name : str
읽기/반환을 위한 Pydantic 모델/스키마 생성
API에서 데이터를 반환할 때 데이터를 읽을 때 사용할 Pydantic 모델 (스키마)을 만듭니다.
예를 들어, 항목을 만들기 전에 항목에 할당된 ID가 무엇인지 알지 못하지만 항목을 읽을 때(API에서 반환할 때) 이미 항목의 ID를 알고 있습니다.
같은 방식으로 사용자를 읽을 때 이제items이 사용자에게 속한 항목을 포함하도록 선언할 수 있습니다.
Pydantic 사용하기 : orm_mode
읽기용 Pydantic 모델 에서 내부 클래스
Item를 추가합니다.User``Config
이것Config클래스는 Pydantic에 구성을 제공하는 데 사용됩니다.
클래스 에서Config속성을 설정합니다orm_mode = True.
Pydantic's
orm_mode는 Pydantic 모델 이 데이터를 읽도록 지시할 것입니다. 데이터가 adict가 아니라 ORM 모델(또는 속성이 있는 다른 임의의 개체)인 경우에도 마찬가지입니다.
이렇게 하면 다음 과 같이 에서id값 을 가져오려고만 하는 대신dict다음과 같이 됩니다.id = data["id"]또한 다음과 같이 속성에서 가져오려고 시도합니다.
id = data.id이를 통해 Pydantic 모델 은 ORM과 호환되며 경로 작업
response_model의 인수에서 선언할 수 있습니다 .