FAST API 직렬화
2023. 11. 6. 04:43ㆍ카테고리 없음
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base, relationship
Base = declarative_base()
class Model1(Base):
__tablename__ = 'model1'
id = Column(Integer, primary_key = True)
name = Column(String(20))
content = Column(String(200))
위와 같은 모델이 있다고 가정해보자. 데이터를 요청 받았을 때, 필요한 데이터만을 주거나 추가적인 데이터를 주고 싶은 상황이 있을 것이다.
from pydantic import BaseModel
from typing import Optional, List
class Response1(BaseModel):
id: int
name: str
def serialize_model1(model1):
response = Response1(
id = model1.id,
name = model1.name
).__dict__
return response
위와 같은 응답 형식을 작성 후, 직렬화하는 함수를 작성한다.
from fastapi import APIRouter
from fastapi.responses import JSONResponse
from db.connection import engineconn
from model.model1 import Model1
from schema.response1 import Response1, serialize_model1
router = APIRouter(
prefix="/common"
)
engine = engineconn()
session = engine.sessionmaker()
@router.get("/second")
async def second():
return {"second": "second"}
@router.get("/third")
async def third():
return {"third": "third"}
@router.get("/response1", response_class=Response1)
async def response1():
result = session.query(Model1).first()
result = serialize_model1(result)
return JSONResponse(content=result, status_code=200)
위와 같이 라우터에 등록하면 원하는 데이터를 내보낼 수 있다.