""" 数据库修复脚本:修复 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()