我有一个名称字段为“jule”的用户。如果我尝试使用完全相同的名称更新它,如下所示:
obj, created = Person.objects.update_or_create(first_name='jule', defaults={'first_name': 'jule'})
Run Code Online (Sandbox Code Playgroud)
这会在我的数据库中执行操作吗?或者 django ORM 是否检测到没有需要进行的更改(然后不在我的数据库中执行任何操作)?
我需要这个来优化循环中的代码:)
感谢您的帮助 !
来自文档:
update_or_create 方法尝试根据给定的 kwargs 从数据库中获取对象。如果找到匹配项,它将更新默认字典中传递的字段。
这是样板代码的快捷方式。例如:
Run Code Online (Sandbox Code Playgroud)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。