from __future__ import annotations from collections.abc import Generator from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.core.config import get_settings DATABASE_URL = get_settings().database_url engine = create_engine( DATABASE_URL, pool_pre_ping=True, future=True, ) SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, expire_on_commit=False, future=True) def get_db() -> Generator[Session, None, None]: db = SessionLocal() try: yield db finally: db.close() @contextmanager def session_scope() -> Generator[Session, None, None]: db = SessionLocal() try: yield db db.commit() except Exception: db.rollback() raise finally: db.close()