from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker, DeclarativeBase from app.core.config import DATABASE_URL engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) class Base(DeclarativeBase): pass def get_db(): db = SessionLocal() try: yield db finally: db.close() def _add_missing_columns() -> None: """マイグレーションフレームワークを使っていないため、既存DBに後から追加されたカラムを ここで簡易的に補う。create_all() は既存テーブルへのカラム追加は行わないので必要。""" with engine.connect() as conn: existing = {row[1] for row in conn.execute(text("PRAGMA table_info(note_pages)"))} if existing and "section" not in existing: conn.execute(text("ALTER TABLE note_pages ADD COLUMN section VARCHAR")) conn.commit() def init_db(): from app.db import models # noqa: F401 Base.metadata.create_all(bind=engine) _add_missing_columns()