56 lines
2.0 KiB
Python
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()) |