本文介紹 django.db.models.query.QuerySet.update_or_create
的用法。
聲明
update_or_create(defaults=None, **kwargs)
一種使用給定 kwargs
更新對象的便捷方法,必要時創建一個新對象。 defaults
是用於更新對象的(字段、值)對的字典。 defaults
中的值可以是可調用的。
返回 (object, created)
的元組,其中 object
是創建或更新的對象, created
是指定是否創建新對象的布爾值。
update_or_create
方法嘗試根據給定的 kwargs
從數據庫中獲取對象。如果找到匹配項,它會更新 defaults
字典中傳遞的字段。
這意味著作為樣板代碼的快捷方式。例如:
defaults = {'first_name': 'Bob'}
try:
obj = Person.objects.get(first_name='John', last_name='Lennon')
for key, value in defaults.items():
setattr(obj, key, value)
obj.save()
except Person.DoesNotExist:
new_values = {'first_name': 'John', 'last_name': 'Lennon'}
new_values.update(defaults)
obj = Person(**new_values)
obj.save()
隨著模型中字段數量的增加,這種模式變得非常笨拙。上麵的示例可以使用update_or_create()
重寫,如下所示:
obj, created = Person.objects.update_or_create(
first_name='John', last_name='Lennon',
defaults={'first_name': 'Bob'},
)
有關如何解析 kwargs
中傳遞的名稱的詳細說明,請參閱
。get_or_create()
如上麵
中所述,如果在數據庫級別未強製執行唯一性,則此方法容易產生 race-condition,這可能導致同時插入多行。get_or_create()
像
和 get_or_create()
一樣,如果您使用手動指定的主鍵並且需要創建一個對象但該鍵已存在於數據庫中,則會引發 create()
。IntegrityError
相關用法
- Python Django QuerySet.union用法及代碼示例
- Python Django QuerySet.using用法及代碼示例
- Python Django QuerySet.select_related用法及代碼示例
- Python Django QuerySet.latest用法及代碼示例
- Python Django QuerySet.values用法及代碼示例
- Python Django QuerySet.intersection用法及代碼示例
- Python Django QuerySet.get用法及代碼示例
- Python Django QuerySet.none用法及代碼示例
- Python Django QuerySet.exclude用法及代碼示例
- Python Django QuerySet.get_or_create用法及代碼示例
- Python Django QuerySet.prefetch_related用法及代碼示例
- Python Django QuerySet.first用法及代碼示例
- Python Django QuerySet.annotate用法及代碼示例
- Python Django QuerySet.dates用法及代碼示例
- Python Django QuerySet.values_list用法及代碼示例
- Python Django QuerySet.select_for_update用法及代碼示例
- Python Django QuerySet.order_by用法及代碼示例
- Python Django QuerySet.bulk_update用法及代碼示例
- Python Django QuerySet.in_bulk用法及代碼示例
- Python Django QuerySet.defer用法及代碼示例
- Python Django QuerySet.aggregate用法及代碼示例
- Python Django QuerySet.reverse用法及代碼示例
- Python Django QuerySet.count用法及代碼示例
- Python Django QuerySet.exists用法及代碼示例
- Python Django QuerySet.explain用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.db.models.query.QuerySet.update_or_create。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。