Files
service-finder/backend/app/compare_schema.py
2026-02-26 08:19:25 +01:00

56 lines
2.0 KiB
Python

# /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())