# ''' # Description: # Author: Manda # Version: # Date: 2025-03-30 16:28:58 # LastEditors: mdhuang555 67590178+mdhuang555@users.noreply.github.com # LastEditTime: 2025-03-30 16:39:18 # ''' from dataBaseConnecter import DatabaseConnector import os from datetime import datetime import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') def get_table_data(db_connector: DatabaseConnector, table_name: str) -> dict: """获取表格数据,以todo_id为键""" try: # 连接数据库 conn = db_connector.connect_db() if not conn: print("无法连接到数据库") return {} cursor = conn.cursor(dictionary=True) try: # 使用连接器的extract_text方法获取数据 results = db_connector.extract_text(conn, table_name, '*') # 将结果转换为以todo_id为键的字典 return {str(row['todo_id']): row for row in results} finally: cursor.close() conn.close() except Exception as e: print(f"获取{table_name}数据错误: {e}") return {} def compare_records(todolist_record: dict, uctodolist_record: dict) -> dict: """比较两条记录的差异""" differences = {} fields_to_compare = ['start_time', 'end_time', 'location', 'todo_content'] for field in fields_to_compare: todo_value = todolist_record.get(field) uc_value = uctodolist_record.get(field) # 特殊处理datetime类型的比较 if isinstance(todo_value, datetime): todo_value = todo_value.strftime('%Y-%m-%d %H:%M:%S') if isinstance(uc_value, datetime): uc_value = uc_value.strftime('%Y-%m-%d %H:%M:%S') if todo_value != uc_value: differences[field] = { 'ToDoList': todo_value, 'UCtodolist': uc_value } return differences def save_differences_to_file(differences: dict, output_dir: str = 'compare_output'): """将差异保存到文件中""" if not os.path.exists(output_dir): os.makedirs(output_dir) # 按用户ID分组 user_differences = {} for todo_id, diff in differences.items(): user_id = diff['user_id'] if user_id not in user_differences: user_differences[user_id] = {} user_differences[user_id][todo_id] = diff['differences'] # 为每个用户创建文件 for user_id, user_diffs in user_differences.items(): filename = os.path.join(output_dir, f'user_{user_id}_differences.txt') with open(filename, 'w', encoding='utf-8') as f: f.write(f"对比时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") f.write(f"用户ID: {user_id}\n") f.write("=" * 50 + "\n\n") for todo_id, diffs in user_diffs.items(): f.write(f"待办事项ID: {todo_id}\n") for field, values in diffs.items(): f.write(f" 字段: {field}\n") f.write(f" ToDoList值: {values['ToDoList']}\n") f.write(f" UCtodolist值: {values['UCtodolist']}\n") f.write("-" * 50 + "\n") print(f"已保存用户 {user_id} 的差异到文件: {filename}") def main(): print("正在连接数据库...") try: # 创建数据库连接器实例 db_connector = DatabaseConnector() # 获取两个表的数据 print("正在获取表格数据...") todolist_data = get_table_data(db_connector, 'ToDoList') uctodolist_data = get_table_data(db_connector, 'UCtodolist') # 比较差异 print("正在比较差异...") differences = {} for todo_id in set(todolist_data.keys()) & set(uctodolist_data.keys()): todolist_record = todolist_data[todo_id] uctodolist_record = uctodolist_data[todo_id] record_differences = compare_records(todolist_record, uctodolist_record) if record_differences: differences[todo_id] = { 'user_id': todolist_record['user_id'], 'differences': record_differences } # 保存差异 if differences: print(f"发现 {len(differences)} 条记录有差异") save_differences_to_file(differences) print("差异已保存到文件中") else: print("未发现差异") except Exception as e: print(f"处理过程中出错: {e}") if __name__ == "__main__": main()