fix_db_indexes.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import os
  2. import pymysql
  3. from urllib.parse import urlparse
  4. from dotenv import load_dotenv
  5. load_dotenv()
  6. def fix_indexes():
  7. """执行索引添加 SQL"""
  8. database_url = os.getenv('DATABASE_URL', '')
  9. if not database_url:
  10. print("❌ 错误: 未在 .env 中找到 DATABASE_URL")
  11. return
  12. parsed = urlparse(database_url)
  13. config = {
  14. 'host': parsed.hostname or 'localhost',
  15. 'port': parsed.port or 3306,
  16. 'user': parsed.username or 'root',
  17. 'password': parsed.password or '',
  18. 'database': parsed.path[1:] if parsed.path else 'sso_db',
  19. 'charset': 'utf8mb4',
  20. 'autocommit': True
  21. }
  22. print(f"📡 正在尝试连接数据库: {config['host']}...")
  23. conn = None
  24. try:
  25. conn = pymysql.connect(**config)
  26. cursor = conn.cursor()
  27. tables = ['t_basis_of_preparation', 't_work_of_preparation', 't_job_of_preparation']
  28. for table in tables:
  29. print(f"⚡ 正在为 {table} 添加索引...")
  30. try:
  31. # 检查索引是否已存在,防止重复添加报错
  32. cursor.execute(f"SHOW INDEX FROM {table} WHERE Key_name = 'idx_enter_status'")
  33. if cursor.fetchone():
  34. print(f" ✅ {table} 的索引已存在,跳过。")
  35. continue
  36. sql = f"ALTER TABLE {table} ADD INDEX idx_enter_status (whether_to_enter)"
  37. cursor.execute(sql)
  38. print(f" ✅ {table} 索引添加成功!")
  39. except Exception as e:
  40. print(f" ❌ {table} 处理失败: {e}")
  41. print("\n🎉 所有任务处理完成!现在您可以重新启动后端服务了。")
  42. except Exception as e:
  43. print(f"\n❌ 数据库连接失败: {e}")
  44. print("💡 提示: 请确保您已经关闭了 full_server.py,否则连接可能被占用。")
  45. finally:
  46. if conn:
  47. conn.close()
  48. if __name__ == "__main__":
  49. fix_indexes()