STABLE: Final schema sync, optimized gitignore
This commit is contained in:
56
backend/app/compare_schema.py
Normal file
56
backend/app/compare_schema.py
Normal file
@@ -0,0 +1,56 @@
|
||||
# /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())
|
||||
Reference in New Issue
Block a user