#!/usr/bin/env python # -*- coding: utf-8 -*- """ 修复考试题目ID不连续的问题 重新为所有考试的题目分配连续的ID """ from app import app, db from models import Exam import json def fix_question_ids(): """修复所有考试的题目ID,使其连续""" with app.app_context(): exams = Exam.query.all() fixed_count = 0 for exam in exams: try: # 获取题目列表 if exam.is_encrypted and exam.encrypted_questions: from app import decrypt_questions questions = json.loads(decrypt_questions(exam.encrypted_questions)) else: questions = exam.get_questions() if not questions: continue # 检查ID是否连续 needs_fix = False for idx, q in enumerate(questions, 1): if q.get('id') != idx: needs_fix = True break if needs_fix: # 重新分配连续的ID for idx, q in enumerate(questions, 1): q['id'] = idx # 保存修复后的题目 questions_json = json.dumps(questions) exam.set_questions(questions) if exam.is_encrypted: from app import encrypt_questions exam.encrypted_questions = encrypt_questions(questions_json) fixed_count += 1 print(f"修复考试 #{exam.id}: {exam.title}") except Exception as e: print(f"处理考试 #{exam.id} 时出错: {e}") continue if fixed_count > 0: db.session.commit() print(f"\n总共修复了 {fixed_count} 份考试") else: print("\n没有需要修复的考试") if __name__ == '__main__': print("开始修复考试题目ID...") fix_question_ids() print("修复完成!")