leechard / app /db /session.py
nenae18's picture
Restore latest code (multi-code) after rollback isolation test
5bf61fe verified
Raw
History Blame Contribute Delete
1.12 kB
from collections.abc import Iterator
from sqlalchemy import create_engine, event
from sqlalchemy.orm import Session, sessionmaker
from app.core.config import settings
_is_sqlite = settings.database_url.startswith("sqlite")
_connect_args = {"check_same_thread": False, "timeout": 30} if _is_sqlite else {}
engine = create_engine(
settings.database_url,
pool_pre_ping=True,
future=True,
connect_args=_connect_args,
)
if _is_sqlite:
# WAL: reader 와 writer κ°€ 곡쑴(ν…ŒμŠ€νŠΈμ˜ eager worker λ™μ‹œ μ“°κΈ° λ°λ“œλ½ λ°©μ§€).
# 운영(Postgres)μ—λŠ” 영ν–₯ μ—†μŒ.
@event.listens_for(engine, "connect")
def _sqlite_pragmas(dbapi_conn, _record): # pragma: no cover
cur = dbapi_conn.cursor()
cur.execute("PRAGMA journal_mode=WAL")
cur.execute("PRAGMA busy_timeout=30000")
cur.close()
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, future=True)
def get_db() -> Iterator[Session]:
"""FastAPI μ˜μ‘΄μ„±: μš”μ²­ λ‹¨μœ„ DB μ„Έμ…˜."""
db = SessionLocal()
try:
yield db
finally:
db.close()