fix_db_indexes.py 2.1 KB

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