migrate_add_bot_name.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. """
  2. 数据库迁移脚本:为 users 表添加 bot_name 字段
  3. 运行: python migrate_add_bot_name.py
  4. """
  5. import asyncio
  6. import aiomysql
  7. from config import settings
  8. import sys
  9. async def migrate_add_bot_name():
  10. """为 users 表添加 bot_name 字段"""
  11. try:
  12. # 创建数据库连接
  13. conn = await aiomysql.connect(
  14. host=settings.MYSQL_HOST,
  15. port=settings.MYSQL_PORT,
  16. user=settings.MYSQL_USER,
  17. password=settings.MYSQL_PASSWORD,
  18. db=settings.MYSQL_DATABASE,
  19. charset='utf8mb4'
  20. )
  21. async with conn.cursor() as cursor:
  22. # 检查字段是否已存在
  23. await cursor.execute("""
  24. SELECT COUNT(*)
  25. FROM INFORMATION_SCHEMA.COLUMNS
  26. WHERE TABLE_SCHEMA = %s
  27. AND TABLE_NAME = 'users'
  28. AND COLUMN_NAME = 'bot_name'
  29. """, (settings.MYSQL_DATABASE,))
  30. result = await cursor.fetchone()
  31. if result[0] > 0:
  32. conn.close()
  33. return True
  34. # 添加 bot_name 字段
  35. await cursor.execute("""
  36. ALTER TABLE users
  37. ADD COLUMN bot_name VARCHAR(100) COMMENT '用户给机器人取的名字'
  38. AFTER user_type
  39. """)
  40. await conn.commit()
  41. conn.close()
  42. return True
  43. except Exception as e:
  44. import traceback
  45. traceback.print_exc()
  46. return False
  47. if __name__ == "__main__":
  48. # 确认是否继续
  49. if len(sys.argv) > 1 and sys.argv[1] == "--force":
  50. confirm = "y"
  51. else:
  52. confirm = input("\n是否继续执行迁移? (y/n): ")
  53. if confirm.lower() != 'y':
  54. sys.exit(0)
  55. # 执行迁移
  56. success = asyncio.run(migrate_add_bot_name())
  57. if not success:
  58. sys.exit(1)