from __future__ import annotations from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.pool import StaticPool from app.core.config import get_settings settings = get_settings() engine_kwargs = {"future": True} if settings.database_url.startswith("sqlite"): engine_kwargs["connect_args"] = {"check_same_thread": False} if settings.database_url.endswith(":memory:"): engine_kwargs["poolclass"] = StaticPool engine = create_engine(settings.database_url, **engine_kwargs) SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, expire_on_commit=False, class_=Session) def get_db() -> Session: db = SessionLocal() try: yield db finally: db.close()