63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
#!/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()) |