Django视图for循环仅向PostgreSQL存入单条数据问题求助
问题原因及解决方案
问题核心是**return HttpResponse('saved')被写在了for循环内部**,导致循环刚执行第一次就直接返回响应,后续的数据完全没机会存入数据库。
修正后的代码
views.py 修复版
def quiz_automate(request): val = automate_data() get_quiz = Quiz.objects.get(subject='english', exam_type='jamb') for data in val['data']: print(data['question']) d_question = Question(text=data['question'], quiz=get_quiz) d_question.save() # 把return移到循环外面,确保所有数据处理完成后再返回 return HttpResponse('所有数据已保存')
额外优化建议
- 数据量较大时,用
bulk_create批量插入比循环调用save()效率高很多:
def quiz_automate(request): val = automate_data() get_quiz = Quiz.objects.get(subject='english', exam_type='jamb') # 先构建所有Question对象的列表 question_list = [ Question(text=data['question'], quiz=get_quiz) for data in val['data'] ] # 批量插入数据库 Question.objects.bulk_create(question_list) return HttpResponse('所有数据已批量保存')
- 注意
Quiz.objects.get()如果找不到匹配对象会抛出异常,建议加异常处理避免报错:
from django.core.exceptions import ObjectDoesNotExist def quiz_automate(request): val = automate_data() try: get_quiz = Quiz.objects.get(subject='english', exam_type='jamb') except ObjectDoesNotExist: return HttpResponse('对应的Quiz记录不存在') # 后续数据处理逻辑... return HttpResponse('所有数据已保存')
内容的提问来源于stack exchange,提问作者Oladeji Olaoluwa
相关产品推荐
相关产品推荐

