| 12345678910111213141516171819202122232425262728293031323334353637 |
- """Database connection and session management (SQLite + SQLAlchemy)."""
- from sqlalchemy import create_engine, event
- from sqlalchemy.orm import sessionmaker, declarative_base
- from .config import DATABASE_URL
- # SQLite engine (check_same_thread=False for FastAPI async)
- engine = create_engine(
- DATABASE_URL,
- connect_args={"check_same_thread": False},
- echo=False,
- )
- # F2 fix: enable foreign key constraints for SQLite (OFF by default)
- @event.listens_for(engine, "connect")
- def _set_sqlite_pragma(dbapi_connection, connection_record):
- cursor = dbapi_connection.cursor()
- cursor.execute("PRAGMA foreign_keys=ON")
- cursor.close()
- SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
- Base = declarative_base()
- def get_db():
- """Dependency for FastAPI route database sessions."""
- db = SessionLocal()
- try:
- yield db
- finally:
- db.close()
- def init_db():
- """Create all database tables."""
- from . import models # noqa: F401 - ensure models are imported
- Base.metadata.create_all(bind=engine)
|