python - 如何在 django 中执行...重复 key 更新...

标签 python django

有没有办法在 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/

相关文章:

Python 数组自动相互复制

python - 有条件地显示来自单个 TastyPie 资源的全部或部分字段

python - 在 Django 中覆盖动态 CSS

python - virtualenvwrapper -> 更新 python 二进制文件

django - 为什么我无法在 ModelForm 的 save() 函数中设置 OneToOneField?

python - 打开pyxl.utils.exceptions.IllegalcharacterError

python - Pandas 导入 FRED 数据(pandas.io.data 或 pandas_datareader)

python - Flask发送html数据回 View

python - 在 Python 中重新排列元组的元组

django - “put_object() 只接受关键字参数。”