Files
service-finder/backend/scripts/list_related_tables.py
2026-06-04 07:26:22 +00:00

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