首页 > 解决方案 > 如何执行批量更新而不是更新每一行?

问题描述

我是 python 和 Django 世界的新手。我不知道是否有更好的方法来执行以下操作:

#retrieve account row, correct soc code and save record.
for i in xrange(0,len(accIdList)):
    acc = account.objects.filter(id=accIdList[i])[0]
    acc.soc = getAccSocCode(acc)
    acc.save()

def getAccSocCode(acc):
    #apply business rules on acc
    # and return new soc code
    return socCode

这就是我的代码现在正在做的事情:

  1. 从数据库中获取帐户行
  2. 将帐户对象传递给单独的方法
  3. 此方法执行一些业务规则并返回新的 soc 代码
  4. 更新帐户行

在这里,我分别更新每个帐户行,有没有更好的方法,如下所示:

#retrieve account row, correct soc code and save record.
accList = []
for i in xrange(0,len(accIdList)):
    acc = account.objects.filter(id=accIdList[i])[0]
    acc.soc = getAccSocCode(acc)
    accList.append(acc)
accList.save()

我尝试了上面的代码,但它抛出一个错误说AttributeError: 'list' object has no attribute 'save'

简而言之,如何在 Django 中执行批量更新?

标签: pythondjango

解决方案


使用 F 对象 - 请参阅:如何使用 Django 进行“批量更新”?.

即使您正在逐一保存,您也应该将代码更改为:

for id in accIdList:
    acc = account.objects.get(id)
    acc.soc = getAccSocCode(acc)
    acc.save()

推荐阅读