from collections.abc import Iterator from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.config import get_settings _settings = get_settings() engine = create_engine( _settings.database_url, pool_pre_ping=True, future=True, ) SessionLocal = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False, future=True) @contextmanager def session_scope() -> Iterator[Session]: session = SessionLocal() try: yield session session.commit() except Exception: session.rollback() raise finally: session.close() def get_session() -> Iterator[Session]: with session_scope() as session: yield session