#!/usr/bin/env python3 """ 更新数据库外键约束,添加级联删除 """ from app import create_app from app.models import db from sqlalchemy import text def update_foreign_keys(): app = create_app() with app.app_context(): try: print("正在更新数据库外键约束...") # 删除现有的外键约束并重新创建带级联删除的约束 queries = [ # 删除现有外键约束 "ALTER TABLE weekly_attendance DROP FOREIGN KEY weekly_attendance_ibfk_1", "ALTER TABLE daily_attendance_details DROP FOREIGN KEY daily_attendance_details_ibfk_1", "ALTER TABLE daily_attendance_details DROP FOREIGN KEY daily_attendance_details_ibfk_2", "ALTER TABLE leave_records DROP FOREIGN KEY leave_records_ibfk_1", "ALTER TABLE students DROP FOREIGN KEY students_ibfk_1", # 重新创建带级联删除的外键约束 "ALTER TABLE weekly_attendance ADD CONSTRAINT weekly_attendance_ibfk_1 FOREIGN KEY (student_number) REFERENCES students (student_number) ON DELETE CASCADE", "ALTER TABLE daily_attendance_details ADD CONSTRAINT daily_attendance_details_ibfk_1 FOREIGN KEY (weekly_record_id) REFERENCES weekly_attendance (record_id) ON DELETE CASCADE", "ALTER TABLE daily_attendance_details ADD CONSTRAINT daily_attendance_details_ibfk_2 FOREIGN KEY (student_number) REFERENCES students (student_number) ON DELETE CASCADE", "ALTER TABLE leave_records ADD CONSTRAINT leave_records_ibfk_1 FOREIGN KEY (student_number) REFERENCES students (student_number) ON DELETE CASCADE", "ALTER TABLE students ADD CONSTRAINT students_ibfk_1 FOREIGN KEY (student_number) REFERENCES users (student_number) ON DELETE CASCADE", ] for query in queries: try: db.session.execute(text(query)) print(f"执行成功: {query}") except Exception as e: print(f"执行失败 (可能约束不存在): {query}") print(f"错误: {e}") continue db.session.commit() print("数据库外键约束更新完成!") except Exception as e: db.session.rollback() print(f"更新失败: {e}") if __name__ == '__main__': update_foreign_keys()