Pydantic 모델 생성
sql_app/schemas.py
SQLAlchemy 모델 과 Pydantic 모델 간의 혼동을 피하기 위해 SQLAlchemy 모델 이 있는 파일
models.py
과schemas.py
Pydantic 모델이 있는 파일이 있습니다.
이 Pydantic 모델은 "스키마"(유효한 데이터 모양)를 어느 정도 정의합니다.
따라서 둘 다 사용하는 동안 혼동을 피하는 데 도움이 됩니다.
초기 Pydantic model/ schemas 생성
데이터를 생성 하거나 읽는 동안 공통 속성
ItemBase
을 갖도록UserBase
Pydantic 모델 (또는
"스키마"라고 함)을 생성합니다.
그리고 생성에 필요한 추가 데이터(속성)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
의 인수에서 선언할 수 있습니다 .