【问题标题】:Django: bulk update from a list of dicts without constructing the whole query setDjango:从字典列表批量更新而不构建整个查询集
【发布时间】:2020-01-08 02:52:26
【问题描述】:

我有一个包含字典的列表。比如:

[{'id': 0, 'price': 20}, {'id': 1, 'price': 10}] # a few thousands of elements

如何在不构建整个 QuerySet 的情况下更新相应的模型?

【问题讨论】:

  • 不确定您所说的“构建整个 QuerySet”是什么意思。
  • 您要更新什么型号?
  • @WillemVanOnsem 我们称之为Match

标签: django django-models django-orm


【解决方案1】:

截至,您可以使用.bulk_update(..) [Django-doc]

data = [{'id': 0, 'price': 20}, {'id': 1, 'price': 10}]

Match.objects.bulk_update([Match(**kv) for kv in data], ['price'])

因此,我们在这里构造 Match 对象,然后将其传递给 bulk_update 以构造更新查询。

【讨论】:

  • Match(**kv) 创建数千个这样的操作是否昂贵?可能不是,但是...
  • @kharandziuk:它不会进行任何查询,它会创建一个Match 对象,所以它等同于Match(id=0, price=20),它不是“免费的”,但可能不会是最大的瓶颈。
  • 这是什么Match,python 模块或 django 的东西?从哪里可以导入??谢谢
  • @WaqarAli:这是我们想要批量创建的模型。因此,如果您想批量创建Profile 记录,请将Match 替换为Profile
  • @WillemVanOnsem 忽略我这个笨蛋。非常感谢。
猜你喜欢
  • 2015-11-28
  • 2018-10-27
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多