File size: 3,125 Bytes
d2f89d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/env python
"""
清空数据库脚本
清空所有测试相关的数据:题目、回答、结果、用户等
"""
import os
import sys

# 添加项目根目录到Python路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)

import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mbti_site.settings')
django.setup()

from django.contrib.auth import get_user_model
from mbti.models import Question, Response, Result, Questionnaire, TypeProfile

User = get_user_model()

def clear_database():
    """清空数据库"""
    print("=" * 50)
    print("开始清空数据库...")
    print("=" * 50)
    
    # 统计删除前的数量
    question_count = Question.objects.count()
    response_count = Response.objects.count()
    result_count = Result.objects.count()
    questionnaire_count = Questionnaire.objects.count()
    user_count = User.objects.count()
    typeprofile_count = TypeProfile.objects.count()
    
    print(f"\n删除前统计:")
    print(f"  题目: {question_count}")
    print(f"  回答: {response_count}")
    print(f"  结果: {result_count}")
    print(f"  问卷: {questionnaire_count}")
    print(f"  用户: {user_count}")
    print(f"  类型档案: {typeprofile_count}")
    
    # 确认
    confirm = input("\n⚠️  确定要清空所有数据吗?(yes/no): ")
    if confirm.lower() != 'yes':
        print("❌ 操作已取消")
        return
    
    print("\n开始删除...")
    
    # 删除回答(必须先删除,因为有外键依赖)
    deleted_responses = Response.objects.all().delete()[0]
    print(f"✓ 删除回答: {deleted_responses} 条")
    
    # 删除结果
    deleted_results = Result.objects.all().delete()[0]
    print(f"✓ 删除结果: {deleted_results} 条")
    
    # 删除题目
    deleted_questions = Question.objects.all().delete()[0]
    print(f"✓ 删除题目: {deleted_questions} 条")
    
    # 删除问卷
    deleted_questionnaires = Questionnaire.objects.all().delete()[0]
    print(f"✓ 删除问卷: {deleted_questionnaires} 条")
    
    # 删除类型档案
    deleted_profiles = TypeProfile.objects.all().delete()[0]
    print(f"✓ 删除类型档案: {deleted_profiles} 条")
    
    # 删除用户(除了超级用户)
    deleted_users = User.objects.filter(is_superuser=False).delete()[0]
    print(f"✓ 删除普通用户: {deleted_users} 条")
    
    print("\n" + "=" * 50)
    print("✅ 数据库清空完成!")
    print("=" * 50)
    
    # 显示剩余数据
    print(f"\n剩余数据:")
    print(f"  超级用户: {User.objects.filter(is_superuser=True).count()}")
    print(f"  题目: {Question.objects.count()}")
    print(f"  回答: {Response.objects.count()}")
    print(f"  结果: {Result.objects.count()}")


if __name__ == '__main__':
    try:
        clear_database()
    except KeyboardInterrupt:
        print("\n\n❌ 操作被用户中断")
        sys.exit(1)
    except Exception as e:
        print(f"\n\n❌ 发生错误: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)