diff --git a/tools/import_sanef_assets.py b/tools/import_sanef_assets.py index 335dd03..38cbde9 100644 --- a/tools/import_sanef_assets.py +++ b/tools/import_sanef_assets.py @@ -58,16 +58,22 @@ def main(): with engine.begin() as conn: if args.truncate: - print("[INFO] Nettoyage des tables dépendantes + TRUNCATE servers") + print("[INFO] Nettoyage des tables référençant servers") if not args.dry_run: - for tbl in ("server_ips", "qualys_assets", "audits", - "session_servers", "planning_sessions", - "patch_history", "ref_correspondance"): - try: - conn.execute(text(f"DELETE FROM {tbl}")) - except Exception as e: - print(f" [WARN] DELETE {tbl}: {e}") + fk_tables = conn.execute(text(""" + SELECT DISTINCT tc.table_name + FROM information_schema.table_constraints tc + JOIN information_schema.constraint_column_usage ccu + ON tc.constraint_name = ccu.constraint_name + WHERE tc.constraint_type = 'FOREIGN KEY' + AND ccu.table_name = 'servers' + AND tc.table_name != 'servers' + """)).fetchall() + for (tbl,) in fk_tables: + conn.execute(text(f"DELETE FROM {tbl}")) + print(f" [OK] cleared {tbl}") conn.execute(text("TRUNCATE servers RESTART IDENTITY CASCADE")) + print(" [OK] servers truncated") inserted = 0 skipped = 0