How To Do ...on Duplicate Key Update... In Django
Is there a way to do the following in django's ORM? INSERT INTO mytable VALUES (1,2,3) ON DUPLICATE KEY UPDATE field=4 I'm familiar with get_or_create, which takes default values,
Solution 1:
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
should provide the behavior you're looking for.
Item.objects.update_or_create(
id=1,
defaults=fields,
)
It returns the same (object, created)
tuple as get_or_create
.
Note that this will still perform two queries, but only in the event the record does not already exist (as is the case with get_or_create
). If that is for some reason unacceptable, you will likely be stuck writing raw SQL to handle this, which would be unfortunate in terms of readability and maintainability.
Solution 2:
I think get_or_create()
is still the answer, but only specify the pk field(s).
item, _ = Item.objects.get_or_create(id=1)
item.update(**fields)
item.save()
Post a Comment for "How To Do ...on Duplicate Key Update... In Django"