"""清理临时联调数据:只删除本任务自己插入的行(按记录到的 ID), 并删除测试期间产生的 download_tasks 行;**保留**新增的两条索引(迁移产物)。 删除顺序按外键依赖:charge_records → compartments → cabin_boards → cabinets → projects → organizations """ import json import os import pymysql HERE = os.path.dirname(os.path.abspath(__file__)) with open(os.path.join(HERE, "temp_ids.json"), encoding="utf-8") as fh: main_ids = json.load(fh) with open(os.path.join(HERE, "temp_ids_orgB.json"), encoding="utf-8") as fh: orgb_ids = json.load(fh) record_ids = main_ids["record_ids"] + [orgb_ids["record_id"]] compartment_ids = main_ids["compartment_ids"] + [orgb_ids["compartment_id"]] board_ids = main_ids["board_ids"] + [orgb_ids["board_id"]] cabinet_ids = main_ids["cabinet_ids"] + [orgb_ids["cabinet_id"]] project_ids = [main_ids["project_id"], orgb_ids["project_id"]] org_ids = [orgb_ids["org_id"]] user_ids = [main_ids["user_id"]] task_ids = [1, 2, 3, 4] # 本次测试创建的下载任务 conn = pymysql.connect(host="10.8.0.252", user="root", password="Hbhyg731024@", database="pms_dev") cur = conn.cursor() steps = [ ("charge_records", "id", record_ids), ("compartments", "id", compartment_ids), ("cabin_boards", "id", board_ids), ("cabinets", "id", cabinet_ids), ("projects", "id", project_ids), ("organizations", "id", org_ids), # download_tasks.user_id 外键指向 users.id ⇒ 必须**先**删 download_tasks 再删 users ("download_tasks", "id", task_ids), ("users", "id", user_ids), ] for table, col, ids in steps: if not ids: continue ph = ",".join(["%s"] * len(ids)) cur.execute(f"DELETE FROM {table} WHERE {col} IN ({ph})", ids) print(f"DELETE {table:16} {cur.rowcount:2d} 行 (ids={ids})") conn.commit() print("\n=== 清理后校验 ===") for table, sql in [ ("charge_records", "SELECT COUNT(*) FROM charge_records"), ("energy_stats", "SELECT COUNT(*) FROM energy_stats"), ("cabinets", "SELECT COUNT(*) FROM cabinets"), ("projects", "SELECT COUNT(*) FROM projects"), ("organizations", "SELECT COUNT(*) FROM organizations"), ("users", "SELECT COUNT(*) FROM users"), ("compartments", "SELECT COUNT(*) FROM compartments"), ("cabin_boards", "SELECT COUNT(*) FROM cabin_boards"), ("download_tasks", "SELECT COUNT(*) FROM download_tasks"), ]: cur.execute(sql) print(f" {table:16} = {cur.fetchone()[0]}") cur.execute( "SELECT index_name, GROUP_CONCAT(column_name ORDER BY seq_in_index) FROM information_schema.statistics " "WHERE table_schema='pms_dev' AND table_name='charge_records' GROUP BY index_name ORDER BY index_name" ) print(" charge_records 索引(应保留):", cur.fetchall()) cur.close() conn.close() print("\n临时数据清理完成")