49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
|
|
"""
|
|||
|
|
数据库修复脚本:修复 Collection 表的唯一约束
|
|||
|
|
运行方式:python fix_collection_constraint.py
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
from app import create_app
|
|||
|
|
from models import db
|
|||
|
|
|
|||
|
|
def fix_collection_constraint():
|
|||
|
|
"""修复 Collection 表的唯一约束"""
|
|||
|
|
app = create_app(os.getenv('FLASK_ENV', 'development'))
|
|||
|
|
|
|||
|
|
with app.app_context():
|
|||
|
|
print("开始修复 Collection 表的唯一约束...")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 删除旧的唯一约束
|
|||
|
|
print("1. 删除旧的唯一约束 unique_user_site_folder...")
|
|||
|
|
db.engine.execute(
|
|||
|
|
"ALTER TABLE collections DROP INDEX unique_user_site_folder"
|
|||
|
|
)
|
|||
|
|
print(" ✓ 旧约束已删除")
|
|||
|
|
|
|||
|
|
# 添加新的唯一约束
|
|||
|
|
print("2. 添加新的唯一约束 unique_user_site...")
|
|||
|
|
db.engine.execute(
|
|||
|
|
"ALTER TABLE collections ADD CONSTRAINT unique_user_site UNIQUE (user_id, site_id)"
|
|||
|
|
)
|
|||
|
|
print(" ✓ 新约束已添加")
|
|||
|
|
|
|||
|
|
print("\n✅ 修复完成!")
|
|||
|
|
print("\n说明:")
|
|||
|
|
print("- 旧约束:(user_id, site_id, folder_id) - 允许重复收藏到未分类")
|
|||
|
|
print("- 新约束:(user_id, site_id) - 每个用户只能收藏一次同一个网站")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"\n❌ 修复失败: {str(e)}")
|
|||
|
|
print("\n可能的原因:")
|
|||
|
|
print("1. 约束名称不匹配(MySQL/SQLite 差异)")
|
|||
|
|
print("2. 数据库中已存在重复数据")
|
|||
|
|
print("3. 数据库权限不足")
|
|||
|
|
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
fix_collection_constraint()
|