有没有办法在 django 的 ORM 中执行以下操作?
INSERT INTO mytable
VALUES (1,2,3)
ON DUPLICATE KEY
UPDATE field=4
我熟悉 get_or_create
,它采用默认值,但如果默认值存在差异,则不会更新记录。通常我使用以下方法,但它需要两次查询而不是一次:
item = Item(id=1)
item.update(**fields)
item.save()
还有其他方法可以做到这一点吗?
最佳答案
I'm familiar with
get_or_create
, which takes default values, but that doesn't update the record if there are differences in the defaults.
update_or_create
应该提供您正在寻找的行为。
Item.objects.update_or_create(
id=1,
defaults=fields,
)
它返回与 get_or_create
相同的(object,created)
元组。
请注意,这仍然会执行两个查询,但仅在记录尚不存在的情况下(如 get_or_create
的情况)。如果由于某种原因这是 Not Acceptable ,您可能会不得不编写原始 SQL 来处理这个问题,这在可读性和可维护性方面是不幸的。
关于python - 如何在 django 中执行...重复 key 更新...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53196088/