#!/usr/bin/env python3 import asyncio import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from sqlalchemy import text from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker from app.core.config import settings async def list_related_tables(): engine = create_async_engine(settings.DATABASE_URL, echo=False) async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) async with async_session() as session: # Find foreign key constraints referencing vehicle.assets query = text(""" SELECT tc.table_schema, tc.table_name, kcu.column_name, ccu.table_schema AS foreign_table_schema, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name, rc.delete_rule FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name JOIN information_schema.referential_constraints AS rc ON rc.constraint_name = tc.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY' AND ccu.table_schema = 'vehicle' AND ccu.table_name = 'assets' AND ccu.column_name = 'id' ORDER BY tc.table_name; """) result = await session.execute(query) fks = result.fetchall() print("Foreign keys referencing vehicle.assets (id):") for fk in fks: print(f" {fk[0]}.{fk[1]}.{fk[2]} -> {fk[3]}.{fk[4]}.{fk[5]} (ON DELETE {fk[6]})") # Also list tables in vehicle schema query2 = text(""" SELECT table_name FROM information_schema.tables WHERE table_schema = 'vehicle' ORDER BY table_name; """) result2 = await session.execute(query2) tables = result2.fetchall() print("\nTables in vehicle schema:") for tbl in tables: print(f" {tbl[0]}") await engine.dispose() if __name__ == "__main__": asyncio.run(list_related_tables())