CHM_attendance/update_foreign_keys.py
superlishunqin 77b57a9876 0914
2025-09-14 01:28:47 +08:00

52 lines
2.5 KiB
Python

#!/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()