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() # 既存DBに後から追加されたカラム: (テーブル名, カラム名, 型) _ADDED_COLUMNS = [ ("note_pages", "section", "VARCHAR"), ("knowledge_entries", "headline", "VARCHAR"), ] def _add_missing_columns() -> None: """マイグレーションフレームワークを使っていないため、既存DBに後から追加されたカラムを ここで簡易的に補う。create_all() は既存テーブルへのカラム追加は行わないので必要。""" with engine.connect() as conn: for table, column, column_type in _ADDED_COLUMNS: existing = {row[1] for row in conn.execute(text(f"PRAGMA table_info({table})"))} if existing and column not in existing: conn.execute(text(f"ALTER TABLE {table} ADD COLUMN {column} {column_type}")) conn.commit() def init_db(): from app.db import models # noqa: F401 Base.metadata.create_all(bind=engine) _add_missing_columns()