python - 如何执行批量更新而不是更新每一行?

标签 python django

我是 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 中进行批量更新?

最佳答案

使用 F 对象 - 请参阅:How to 'bulk update' with Django? .

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

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

关于python - 如何执行批量更新而不是更新每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048454/

相关文章:

python - Coverage.py 警告 : No data was collected.(未收集数据)

python - 即使不为 true,If 语句也始终运行

python - 在 Pandas df 中创建新列,其中每行的值取决于紧邻其上方的行中不同列的值

python - nltk.trigams 没有 count 属性

python - 用Python随机生成地牢

django - 使用电子邮件和密码验证用户

Django 为嵌套外键定义 __str__

python set.remove 行为和其他内置函数

python - 如何为Django Rest Framework指定过滤数据参数?

django - 如何在包含 M2M 字段的 AdminForm 中使用 save_model?