MJSEC 활동/백엔드(2025-2학기)

백엔드 3주차 / ORM 이해, SQLAlchemy로 질문 목록 API 만들기

stw0218 2025. 11. 2.

점프 투 FastAPI의 2장 시작부분부터 2-04까지 내용

 

파일 구조는 이런 느낌...

domain 폴더의 answer, question, user 폴더에는 각각 db를 처리하는 파이썬 코드가 들어갈 것으로 보인다.

 

각 도메인에는 3가지 파일이 들어간다.

1. router: url과 전체적인 동작 관리

2. crud: 데이터의 create, read, update, delete 처리

3. schema: 입출력 관리

 

https://github.com/pahkey/fastapi-book/tree/v2.04.4

 

GitHub - pahkey/fastapi-book

Contribute to pahkey/fastapi-book development by creating an account on GitHub.

github.com

 

오늘 한 내용은 2-04 까지...

sqlalchemy로 db 생성, 조회, 변경, 삭제를 해보았고

/api/question 도메인에서 db에 존재하는 질문 목록 불러오는 기능을 구현했다.

 

# question_router.py
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session

from database import get_db
from domain.question import question_schema, question_crud

router = APIRouter(
    prefix="/api/questions",
)

@router.get("/list", response_model=list[question_schema.Question])
def question_list(db: Session = Depends(get_db)):
    _question_list = question_crud.get_question_list(db)
    return _question_list
# question_crud.py
from models import Question
from sqlalchemy.orm import Session

def get_question_list(db: Session):
    question_list = db.query(Question)\
    .order_by(Question.create_date.desc())\
    .all()
    return question_list
# question_schema.py
import datetime
from pydantic import BaseModel

class Question(BaseModel):
    id: int
    subject: str
    content: str
    create_date: datetime.datetime

 

schema에는 question 테이블 구조가 정의되어있다. pydantic이라는 라이브러리로 유효성을 검증

crud는 sqlalchemy orm을 활용해서 db에서 Question 목록을 가져온다.

router는 /api/questions/list 의 동작이 정의되어있는데, 이는 crud 코드의 get question list를 실행한다.

 

 

fastapi의 docs 기능을 통해 question router를 테스트해본 모습

 

댓글