# /app/app/compare_schema.py import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import inspect, text from app.database import Base from app.core.config import settings import app.models # Fontos: betölti az összes modellt a Base.metadata-ba async def compare(): # Megfelelő async engine létrehozása engine = create_async_engine(str(settings.SQLALCHEMY_DATABASE_URI)) def get_diff(connection): # Inspector példányosítása a szinkron wrapperen belül inspector = inspect(connection) # Sémák ellenőrzése all_schemas = inspector.get_schema_names() print(f"Létező sémák: {all_schemas}") if 'data' not in all_schemas: print("❌ HIBA: A 'data' séma nem létezik!") return db_tables = inspector.get_table_names(schema="data") print(f"\n--- Diagnosztika: 'data' séma táblái ---") # Modellekben definiált táblák a 'data' sémában model_tables = [t.name for t in Base.metadata.sorted_tables if t.schema == 'data'] for mt in model_tables: if mt not in db_tables: print(f"❌ HIÁNYZÓ TÁBLA: {mt}") else: # Oszlopok összehasonlítása db_cols = {c['name']: c for c in inspector.get_columns(mt, schema="data")} model_cols = Base.metadata.tables[f"data.{mt}"].columns print(f"🔍 Ellenőrzés: {mt}") missing = [] for m_col in model_cols: if m_col.name not in db_cols: missing.append(m_col.name) if missing: print(f" ❌ Hiányzó oszlopok a DB-ben: {missing}") else: print(f" ✅ Minden oszlop egyezik.") async with engine.connect() as conn: await conn.run_sync(get_diff) await engine.dispose() if __name__ == "__main__": asyncio.run(compare())