Spaces:
Sleeping
Sleeping
| """SQLAlchemy engine and session setup for the local SQLite database.""" | |
| from __future__ import annotations | |
| from collections.abc import Iterator | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import DeclarativeBase, Session, sessionmaker | |
| from .config import settings | |
| # check_same_thread=False lets the SQLite connection be used across the | |
| # threadpool that FastAPI/uvicorn uses for sync endpoints. | |
| engine = create_engine( | |
| settings.DATABASE_URL, | |
| connect_args={"check_same_thread": False}, | |
| future=True, | |
| ) | |
| SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, future=True) | |
| class Base(DeclarativeBase): | |
| """Declarative base for all ORM models.""" | |
| def init_db() -> None: | |
| """Create tables if they do not already exist.""" | |
| from . import models # noqa: F401 -- ensure models are imported/registered | |
| Base.metadata.create_all(bind=engine) | |
| def get_db() -> Iterator[Session]: | |
| """FastAPI dependency: yield a DB session and always close it.""" | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |