상세 컨텐츠

본문 제목

[FastAPI] CRUD 구현 (schemas.py 부분) #3

FastAPI

by grizzly 2025. 4. 11. 11:45

본문

이번엔 schemas.py 부분을 확인해보자

 

from pydantic import BaseModel
from datetime import datetime
from typing import List, Optional

class PatientBase(BaseModel):
    name: str
    brith_date: datetime
    gender: str
    contact: str
    address: Optional[str] = None

class PatientCreate(PatientBase):
    pass

class PatientUpdate(BaseModel):
    name: Optional[str] = None
    birth_date: Optional[datetime] = None
    gender: Optional[str] = None
    contact: Optional[str] = None
    address: Optional[str] = None
    is_active: Optional[bool] = None

class Patient(PatientBase):
    id: int
    is_active: bool
    created_at: datetime
    updated_at: datetime

    class Config:
        orm_mode = True

환자에 관한 스키마 부분은 다음과 같다.

 

스키마 파트는 FastAPI에서의 데이터 모델의 구조를 정의하는 부분이다.

하나 하나 자세히 살펴보면

class PatientBase(BaseModel):
    name: str
    birth_date: datetime
    gender: str
    contact: str
    address: Optional[str] = None

해당 클래스는 환자 정보의 기본 속성을 정의하는 클래스이다.

  • name, gender, contact : 필수 문자열 필드
  • birth_date : 날짜 타입 필드
  • address : Optimal[str] = None 은 필드의 값이 Optional 하며 기본 값이 None임을 나타낸다.
class PatientCreate(PatientBase):
    pass
  • PatientBase를 상속 받아 새 환자 생성에 사용
  • 부모 클래스와 동일한 필드를 갖음
  • pass 는 추가 코드가 없음을 나타냄
class PatientUpdate(BaseModel):
    name: Optional[str] = None
    birth_date: Optional[datetime] = None
    gender: Optional[str] = None
    contact: Optional[str] = None
    address: Optional[str] = None
    is_active: Optional[bool] = None
  • 환자 정보 업데이트에 사용되는 클래스
  • 모든 필드가 Optional로 정의되어 부분 업데이트 가능
  • 필요한 필드만 전달하여 해당 필드만 업데이트 가능
class Patient(PatientBase):
    id: int
    is_active: bool
    created_at: datetime
    updated_at: datetime

    class Config:
        orm_mode = True
  • 데이터 베이스에서 가져온 전체 환자 정보를 나타내는 클래스
  • PatientBase의 모든 필드를 상속 받음 (추가 필드가 있음)
    • id : 환자의 고유 식별자
    • is_active : 활성 상태 여부
    • create_at / update_at : 생성 및 업데이트 타임 스탬프
  • Config 내부 클래스
    • orm_mode = True : ORM 객체(예 : SQLAlchemy)를 Pydantic 모델로 변환할 수 있음
    • 데이터 베이스 객체와 API 응답 사이의 변환을 자동화

일반적인 패턴은

1. Base모델 (공통필드)

2. Create 모델 (API에서 새 리소스 생성 시 사용)

3. Update모델 (부분 업데이트를 위한 모델)

4. 응답 모델 (데이터베이스에서 반환된 전체 객체)

로 구성되어있다.

관련글 더보기