Kamixitong/update_db.py
2025-11-11 21:39:12 +08:00

66 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
更新数据库表结构
"""
import sys
import os
# 添加项目路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app import create_app, db
from sqlalchemy import text
def update_database():
"""更新数据库表结构"""
app = create_app()
with app.app_context():
try:
# 检查当前license_key列的长度
result = db.session.execute(text("PRAGMA table_info(license)"))
columns = result.fetchall()
license_key_column = None
for column in columns:
if column[1] == 'license_key':
license_key_column = column
break
if license_key_column:
print(f"当前license_key列类型: {license_key_column[2]}")
# 如果长度是VARCHAR(32)则更新为VARCHAR(35)
if "VARCHAR(32)" in str(license_key_column[2]).upper():
print("正在更新license_key列长度为VARCHAR(35)...")
# SQLite不支持直接修改列类型需要重建表
# 但我们可以添加一个新列,复制数据,然后删除旧列,再重命名新列
# 1. 添加新列
db.session.execute(text("ALTER TABLE license ADD COLUMN license_key_new VARCHAR(35)"))
# 2. 复制数据
db.session.execute(text("UPDATE license SET license_key_new = license_key"))
# 3. 删除旧列SQLite不支持直接删除列需要重建表
# 我们采用另一种方法直接修改表结构这在SQLite中比较复杂
print("注意SQLite不支持直接修改列类型需要手动处理")
print("建议使用SQLite工具手动执行以下SQL")
print("ALTER TABLE license ALTER COLUMN license_key TYPE VARCHAR(35)")
elif "VARCHAR(35)" in str(license_key_column[2]).upper():
print("license_key列已经是正确的长度")
else:
print(f"license_key列类型未知: {license_key_column[2]}")
else:
print("未找到license_key列!")
except Exception as e:
print(f"更新数据库结构时出错: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
update_database()