python – 如何强制django立即保存,而不是在循环后进行批量更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何强制django立即保存,而不是在循环后进行批量更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1366字,纯文字阅读大概需要2分钟。
内容图文
![python – 如何强制django立即保存,而不是在循环后进行批量更新](/upload/InfoBanner/zyjiaocheng/778/2f79e1020122491d8a872692b2a7937d.jpg)
我有这个django views.py方法,旨在将许多数据插入到数据库中.它循环遍历模型数组,如果某个对象尚未在数据库中,则会插入它.
这就是代码的样子:
def update_my_db(request):
a_models = A_Model.objects.filter(my_flag=True)
for a_model in a_models:
b_model_array = []
[...] # this is where b_model_array gets filled
for index in range(len(b_model_array)):
current_b_model = b_model_array[index]
try:
b_model = B_Model.objects.get(my_field=current_b_model.my_field)
except (KeyError, B_Model.DoesNotExist):
b_model = B_Model.objects.create(field_1=current_b_model.field_1, field_2=current_b_model.field_2)
b_model.save()
return HttpResponse(response)
我注意到经过几次测试后db只在最后一次迭代结束时更新,好像django等待对mysql进行批量插入.
问题是:任何迭代都有可能引发异常,使得到目前为止收集的所有数据都因为错误而被丢弃(已经过测试并确认).当谈到添加400个新行时,在循环#399处引发异常并丢弃所有以前的398行对我来说是非常不受欢迎的.
我知道批处理是关于性能的最佳选择,但这是一个后台例程,所以我并不担心.
Bottomline:有没有办法在每次迭代时强制django更新数据库?
解决方法:
如果您使用的是Django 1.6,请查看:https://docs.djangoproject.com/en/dev/topics/db/transactions/
您对该页面的上下文管理器部分感兴趣:
from django.db import transaction
def viewfunc(request):
# This code executes in autocommit mode (Django's default).
do_stuff()
with transaction.atomic():
# This code executes inside a transaction.
do_more_stuff()
内容总结
以上是互联网集市为您收集整理的python – 如何强制django立即保存,而不是在循环后进行批量更新全部内容,希望文章能够帮你解决python – 如何强制django立即保存,而不是在循环后进行批量更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。