from collections.abc import Iterator from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.config import settings from app.db.models import Base engine = create_engine(settings.db_url, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(bind=engine, expire_on_commit=False) def init_db() -> None: Base.metadata.create_all(engine) @contextmanager def get_session() -> Iterator[Session]: session = SessionLocal() try: yield session session.commit() except Exception: session.rollback() raise finally: session.close()