FastAPI.6 Pydantic, Schemas

BodeulMaNN·2022년 12월 9일
0

FastAPI

목록 보기
6/8

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 모델 이 데이터를 읽도록 지시할 것입니다. 데이터가 a dict가 아니라 ORM 모델(또는 속성이 있는 다른 임의의 개체)인 경우에도 마찬가지입니다.
이렇게 하면 다음 과 같이 에서 id값 을 가져오려고만 하는 대신 dict다음과 같이 됩니다.

id = data["id"]

또한 다음과 같이 속성에서 가져오려고 시도합니다.

id = data.id

이를 통해 Pydantic 모델 은 ORM과 호환되며 경로 작업response_model 의 인수에서 선언할 수 있습니다 .

profile
반갑습니다

0개의 댓글