52 lines
2.5 KiB
Python
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()
|