| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """
- 数据库迁移脚本:为 users 表添加 bot_name 字段
- 运行: python migrate_add_bot_name.py
- """
- import asyncio
- import aiomysql
- from config import settings
- import sys
- async def migrate_add_bot_name():
- """为 users 表添加 bot_name 字段"""
-
- try:
- # 创建数据库连接
- conn = await aiomysql.connect(
- host=settings.MYSQL_HOST,
- port=settings.MYSQL_PORT,
- user=settings.MYSQL_USER,
- password=settings.MYSQL_PASSWORD,
- db=settings.MYSQL_DATABASE,
- charset='utf8mb4'
- )
-
- async with conn.cursor() as cursor:
- # 检查字段是否已存在
- await cursor.execute("""
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = %s
- AND TABLE_NAME = 'users'
- AND COLUMN_NAME = 'bot_name'
- """, (settings.MYSQL_DATABASE,))
-
- result = await cursor.fetchone()
- if result[0] > 0:
- conn.close()
- return True
-
- # 添加 bot_name 字段
- await cursor.execute("""
- ALTER TABLE users
- ADD COLUMN bot_name VARCHAR(100) COMMENT '用户给机器人取的名字'
- AFTER user_type
- """)
-
- await conn.commit()
-
- conn.close()
-
- return True
-
- except Exception as e:
- import traceback
- traceback.print_exc()
- return False
- if __name__ == "__main__":
- # 确认是否继续
- if len(sys.argv) > 1 and sys.argv[1] == "--force":
- confirm = "y"
- else:
- confirm = input("\n是否继续执行迁移? (y/n): ")
-
- if confirm.lower() != 'y':
- sys.exit(0)
-
- # 执行迁移
- success = asyncio.run(migrate_add_bot_name())
-
- if not success:
- sys.exit(1)
|