gpt4 book ai didi

Django 相当于 SQL REPLACE

转载 作者:行者123 更新时间:2023-12-04 13:04:53 25 4
gpt4 key购买 nike

是否有此 SQL 的 Django ORM 最佳实践:

REPLACE app_model SET field_1 = 'some val', field_2 = 'some val';

假设:field_1 或 field_2 将有一个唯一的键(或在我的情况下两者都有),否则这将始终评估为 INSERT。

编辑:

我现在最好的个人答案是这个,但它是 2-3 个查询,其中 1 个应该是可能的:
    from django.core.exceptions import ValidationError
try:
Model(field_1='some val',field_2='some val').validate_unique()
Model(field_1='some val',field_2='some val',extra_field='some val').save()
except ValidationError:
Model.objects.filter(field_1='some val',field_2='some val').update(extra_field='some val')

最佳答案

你说你要REPLACE ,我认为应该在插入之前删除任何现有行,但您的示例表明您想要更像 UPSERT 的内容.

AFAIK,django 不支持 REPLACE (或 sqlite 的 INSERT OR REPLACEUPSERT )。但是您的代码可以合并:

obj, created = Model.objects.get_or_create(field_1='some val', field_2='some_val')
obj.extra_field = 'some_val'
obj.save()

这当然假设 field_1 , field_2 ,或者两者都是独一无二的(如您所说)。

它仍然是两个查询( SELECTget_or_createINSERTUPDATEsave ),但直到 UPSERT - 类似的解决方案出现了(它可能不会持续很长时间),它可能是你能做的最好的。

关于Django 相当于 SQL REPLACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com