clean_empty_suspected_errors_python.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import pymysql
  2. print('使用Python清理数据库中所有只包含空格和换行符的疑似错误标注...')
  3. try:
  4. conn = pymysql.connect(
  5. host='rm-f8ze60yirdj8786u2wo.mysql.rds.aliyuncs.com',
  6. port=3306,
  7. user='root',
  8. password='csqz@20255',
  9. db='csqz-client',
  10. charset='utf8mb4',
  11. cursorclass=pymysql.cursors.DictCursor
  12. )
  13. print('数据库连接成功')
  14. cursor = conn.cursor()
  15. # 1. 查询所有suspected_error字段不为NULL的成员
  16. query = """
  17. SELECT id, name, suspected_error
  18. FROM family_member_info
  19. WHERE suspected_error IS NOT NULL
  20. ORDER BY name
  21. """
  22. cursor.execute(query)
  23. members = cursor.fetchall()
  24. print(f'\n找到 {len(members)} 个成员的suspected_error字段不为NULL')
  25. # 2. 检查并清理只包含空白字符的记录
  26. to_clean = []
  27. for member in members:
  28. se = member['suspected_error']
  29. if isinstance(se, str):
  30. # 使用Python的strip()函数来去除空白字符
  31. if se.strip() == '':
  32. to_clean.append(member['id'])
  33. print(f'需要清理: ID={member["id"]}, 姓名={member["name"]}, 疑似错误标注={repr(se)}')
  34. print(f'\n找到 {len(to_clean)} 条需要清理的记录')
  35. if to_clean:
  36. # 3. 清理这些记录,将suspected_error设置为NULL
  37. update_query = """
  38. UPDATE family_member_info
  39. SET suspected_error = NULL
  40. WHERE id = %s
  41. """
  42. count = 0
  43. for member_id in to_clean:
  44. cursor.execute(update_query, (member_id,))
  45. count += 1
  46. conn.commit()
  47. print(f'\n成功清理 {count} 条记录')
  48. else:
  49. print('\n没有需要清理的记录')
  50. # 4. 验证清理结果
  51. cursor.execute(query)
  52. remaining_members = cursor.fetchall()
  53. remaining_empty = 0
  54. for member in remaining_members:
  55. se = member['suspected_error']
  56. if isinstance(se, str) and se.strip() == '':
  57. remaining_empty += 1
  58. print(f'\n清理后剩余 {remaining_empty} 条需要清理的记录')
  59. print(f'清理后suspected_error不为NULL的记录数: {len(remaining_members)}')
  60. conn.close()
  61. except Exception as e:
  62. print(f'Error: {e}')