我有一个简单的模型:
class A(models.Model):
status=models.CharField()
我以这种方式列出了字典项目:
data=[
{'id':1, 'status':'moved'},
{'id':2, 'status':'sized'}
]
id和status键与模型字段相关。目前,我正在通过循环数据来更新它们,这没关系。但是前几天网络服务发了一个很长的清单,它让我思考,如果他们不发送数天和发送的话,它可能是一个很大的清单。由于我无法控制传递给我的数据,最有效的更新方式是什么?
目前:
for i in range(len(data)):
record=A.objects.get(pk=data[i]['id'])
record.status=data[i]['status']
record.save()
我正在寻找类似.filter()。update(....)的东西,但其状态可以对每条记录采用不同的方式。
任何人?
答案 0 :(得分:1)
以下是使用atomic transaction
的代码的改进版本from django.db import transaction
@transaction.atomic
def update(data):
for d in range(data):
record = A.objects.get(pk=d['id'])
record.status = d['status']
record.save()
如果过程花费的时间过长,请使用像Celery这样的任务队列,它将在后台完成工作或在任何给定时间安排它,例如在没有人使用您的应用程序的午夜时