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)

 

위와 같이 라우터에 등록하면 원하는 데이터를 내보낼 수 있다.