ToDoAgent / Notify /compareDb2txt.py
Siyu Wang
updated to KK_Server
84ed1d1
# '''
# 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()