import pymysql import pandas as pd from datetime import datetime # 数据库连接配置 db_config = { "host": "192.144.230.75", "port": 3306, "user": "db_vidcon", "password": "rexdK4fhCCiRE4BZ", "database": "db_vidcon", "charset": "utf8mb4", } def get_rn_list(): """获取所有地区列表""" sql = "SELECT DISTINCT rn FROM sh_dm_video_op_v2;" conn = pymysql.connect(**db_config) df = pd.read_sql(sql, conn) conn.close() return df['rn'].tolist() def get_data_for_rn(rn: str) -> pd.DataFrame: """针对指定 rn 拉取数据""" # 注意:这里把 SQL 中的 rn 和 level 参数化 sql = f""" SELECT op.id AS ID, v.v_name AS 片名, v.link AS 视频连接, v.is_piracy AS 是否盗版, op.`level` AS 优先级, op.rn AS 地区, NULL AS 投诉日期, NULL AS 下线日期, op.keyword AS 关键词, v.title AS 标题, v.duration AS 时长, v.watch_number AS 观看数量, v.public_time AS 上传时间, v.u_pic AS 头像, CASE WHEN dup.cnt > 1 THEN 1 ELSE 2 END AS 是否重复, op.sort AS 排序, op.batch AS 批次, op.machine AS 机器号, v.u_id AS 用户id, v.u_xid AS u_xid, v.u_name AS 用户名称 FROM sh_dm_video_op_v2 AS op LEFT JOIN ( SELECT t.v_xid, COUNT(*) AS cnt FROM sh_dm_video_op_v2 AS t WHERE t.batch IN (1747324254, 1747323990) GROUP BY t.v_xid ) AS dup ON op.v_xid = dup.v_xid LEFT JOIN sh_dm_video_v2 AS v ON op.v_xid = v.v_xid WHERE op.rn = %s AND op.batch IN (1747324254, 1747323990) ORDER BY op.id; """ conn = pymysql.connect(**db_config) df = pd.read_sql(sql, conn, params=(rn)) conn.close() return df def export_all(): """循环所有地区,导出 Excel""" rn_list = get_rn_list() for rn in rn_list: df = get_data_for_rn(rn) if df.empty: continue timestamp = datetime.now().strftime("%Y%m%d") safe_rn = rn.replace(" ", "_") # 如果地区名里有空格或特殊字符 filename = f"{timestamp}_T0T1_{safe_rn}.xlsx" df.to_excel(filename, index=False) print(f"已导出:{filename}") if __name__ == "__main__": export_all()