from __future__ import annotations from collections.abc import Generator from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.core.config import settings if settings.database_dialect.strip().lower() == "sqlite": settings.sqlite_file.parent.mkdir(parents=True, exist_ok=True) connect_args = ( {"check_same_thread": False} if settings.database_dialect.strip().lower() == "sqlite" else {} ) engine = create_engine( settings.database_url, echo=settings.database_echo, pool_pre_ping=True, connect_args=connect_args, ) SessionLocal = sessionmaker( bind=engine, class_=Session, autoflush=False, autocommit=False, expire_on_commit=False, ) def get_db() -> Generator[Session, None, None]: db = SessionLocal() try: yield db finally: db.close()