728x90
반응형
jsonable_encoder
- FastAPI에서는 데이터 타입(Pydantic 모델 등)을 JSON 호환 형태(예: dict, list 등)로 변환해야 하는 경우 사용
- ex) 데이터베이스에 저장할 때, JSON으로 응답할 때
- 작동원리 예시
- Pydantic 모델 변환: Pydantic 모델을 딕셔너리로 변환
- datetime 변환: datetime 객체를 ISO 형식의 문자열로 변환
- UUID 변환: UUID 객체를 문자열로 변환
- Enum 변환: Enum 객체를 해당 값으로 변환
- set 변환: set 객체를 리스트로 변환
- JSON 호환 형태 반환: 최종적으로 JSON으로 직렬화할 수 있는 Python 표준 데이터 구조(딕셔너리, 리스트 등)를 반환
from datetime import datetime
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
# 가짜 데이터베이스
fake_db = {}
# Pydantic 모델 정의
class Item(BaseModel):
title: str
timestamp: datetime
description: str | None = None
app = FastAPI()
# 아이템 업데이트 엔드포인트
@app.put("/items/{id}")
def update_item(id: str, item: Item):
# Pydantic 모델을 JSON 호환 형태로 변환
json_compatible_item_data = jsonable_encoder(item)
# 변환된 데이터를 가짜 데이터베이스에 저장
fake_db[id] = json_compatible_item_data
- Item 모델: Pydantic 모델로, title, timestamp, description 속성을 가짐
- update_item 엔드포인트: 이 엔드포인트는 아이템을 업데이트하고 데이터베이스에 저장
- jsonable_encoder: item 객체를 JSON 호환 형태로 변환합니다. datetime 객체는 ISO 형식의 문자열로 변환
- 데이터베이스에 저장: 변환된 데이터를 가짜 데이터베이스 fake_db에 저장
from pydantic import BaseModel
from fastapi.encoders import jsonable_encoder
class SubItem(BaseModel):
name: str
class Item(BaseModel):
id: int
subitem: SubItem
item = Item(id=1, subitem=SubItem(name="SubItemName"))
encoded_item = jsonable_encoder(item)
print(encoded_item) # {'id': 1, 'subitem': {'name': 'SubItemName'}}
- 중첩된 구조에서도 사용 가능
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[SQLAlchemy] 1. Engine (0) | 2024.06.22 |
---|---|
[FastAPI] 12. Update: PUT, PATCH (0) | 2024.06.20 |
[FastAPI] 10. Form Data & Request File (0) | 2024.06.20 |
[FastAPI] 9. Extra Data Types (0) | 2024.06.19 |
[FastAPI] 8. Fields (0) | 2024.06.19 |