関連記事
FastAPI + postgressのアプリ構築メモ part.1 環境構築
FastAPI + postgressのアプリ構築メモ part.2 CREATE
FastAPI + postgressのアプリ構築メモ part.3 READ (イマココ)
今回やること
前回はデータのcreateをやったので、DBの中身を取得するRの処理を実装していきます
READ
base_models.py
from pydantic import BaseModel
from datetime import datetime
class News(BaseModel):
title: str
link: str
created_at: datetime
news_handlers.py
from fastapi import HTTPException
from sqlalchemy import desc
from sqlalchemy.exc import SQLAlchemyError
# my modules
from models import NEWS
from database import Session
from lib.base_models import *
def get_5_latest_news():
latest_news = []
try:
ses = Session()
news_5 = ses.query(NEWS).order_by(desc(NEWS.created_at)).limit(5).all()
for news in news_5:
news_tmp = News(
title = news.title,
link = news.link,
created_at = news.created_at
)
latest_news.append(news_tmp)
except SQLAlchemyError:
raise HTTPException(status_code=500, detail="db check failed")
finally:
ses.close()
return latest_news
news.py
from fastapi import APIRouter
from typing import List
# my modules
from lib.news_handlers import add_news_to_db, get_5_latest_news
from lib.base_models import *
router = APIRouter()
@router.get("/news/latest_news", response_model=List[News], tags=["news"])
async def get_latest_news():
return get_5_latest_news()
これでDBのレコードを取得してreturnすることができるようになりました