본문으로 건너뛰기
백엔드 기초집: Python FastAPILESSON 14

SQLAlchemy 2.x와 SQLite 연결

난이도초급
예상 시간35분
선수지식이전 강의

14강. SQLAlchemy 2.x와 SQLite 연결

1. 이번 강의에서 해결할 문제

데이터 모델 설계를 실제 SQLite 파일과 연결해야 합니다. 요청마다 Session을 열고 성공·실패 뒤 반드시 닫는 기반을 만듭니다.

2. 학습 목표

3. 핵심 개념

Engine은 DB 연결과 dialect의 출발점이며 Session은 ORM 객체 변경과 트랜잭션을 관리하는 작업 단위입니다. SQLAlchemy 2.x는 DeclarativeBase, Mapped, mapped_column, select() 스타일을 사용합니다. SQLite는 파일 하나로 시작하기 좋지만 운영 동시성과 기능은 PostgreSQL 단계에서 확장합니다.

4. 단계별 코드 예시

파일 경로: game-ranking-api/app/database.py

app/database.py
from collections.abc import Generator

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Session, sessionmaker

from app.config import settings


class Base(DeclarativeBase):
pass


connect_args = {"check_same_thread": False} if settings.database_url.startswith("sqlite") else {}
engine = create_engine(settings.database_url, connect_args=connect_args)
SessionLocal = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False)


def get_db() -> Generator[Session, None, None]:
with SessionLocal() as session:
yield session

파일 경로: game-ranking-api/app/main.py

app/main.py
from fastapi import FastAPI
from sqlalchemy import text

from app.database import engine
from app.routers import records

app = FastAPI(title="Game Ranking API")
app.include_router(records.router)


@app.get("/health", tags=["system"])
def health() -> dict[str, str]:
with engine.connect() as connection:
connection.execute(text("SELECT 1"))
return {"status": "ok", "database": "connected"}

실행 위치: game-ranking-api/

$env:JWT_SECRET = 'development-only'
python -m uvicorn app.main:app --reload
Invoke-RestMethod http://127.0.0.1:8000/health

5. 코드가 동작하는 이유

SQLite URL을 읽어 Engine을 만들고 sessionmaker가 같은 설정의 Session을 생성합니다. context manager가 요청 처리 후 Session을 닫습니다. SQLite 드라이버의 기본 thread 검사를 해제하되 Session 하나를 여러 요청에서 공유하지는 않습니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

SQLAlchemy 2.x와 SQLite 연결 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“SQLAlchemy 2.x와 SQLite 연결”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2“SQLAlchemy 2.x와 SQLite 연결”에서 ‘Engine과 Session을 같은 객체로 생각합니다.’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

14강. SQLAlchemy 2.x와 SQLite 연결 미완료 상태