create_or_update()
函数是Django ORM中提供的一个非常实用的方法,它可以用于在数据库中创建新的对象或者更新已有的对象。如果指定的对象在数据库中不存在,该方法会创建一个新的对象并保存到数据库中;如果指定的对象在数据库中已经存在,则该方法会直接更新该对象的数据,并保存到数据库中。
该方法的核心思想是:先尝试从数据库中获取指定条件的对象,如果获取到了,则更新它的数据;如果没有获取到,则创建一个新的对象,并保存到数据库中。
下面是该函数的详细使用方法以及两个实例说明:
函数的定义:
Model.objects.update_or_create(defaults=None, **kwargs)
参数:
defaults
: 字典类型,可以设置需要更新的字段和值,如果不指定则使用传入的参数**kwargs
。**kwargs
: 关键字参数,用来指定查询条件及其它需要更新的字段。
返回值:
该函数会返回一个元组 (object, created)
,其中:
object
: 表示更新或创建的对象。created
: 表示该对象是否是新创建的,如果是返回True
,否则返回False
。
示例1:
假设我们有一个名为 Person
的模型类,它有以下属性:
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
address = models.CharField(max_length=200)
我们现在需要根据名字和地址创建新的对象,如果存在则更新年龄。我们可以这样使用 create_or_update()
方法:
person, created = Person.objects.update_or_create(
name='Tom',
address='New York',
defaults={'age': 25}
)
- 如果数据库中已经存在名字为
Tom
,地址为New York
的对象,那么更新该对象的年龄为25
,并返回更新后的对象person
和created=False
; - 如果数据库中不存在这个对象,则创建新的对象,并保存到数据库中,并返回创建的对象
person
和created=True
。
示例2:
我们有一个名为 Product
的模型类,它有以下属性:
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=6, decimal_places=2)
我们需要根据产品名称更新价格,如果产品不存在则创建新的产品。我们可以这样使用 create_or_update()
方法:
product, created = Product.objects.update_or_create(
name='iPhone',
defaults={'price': 699.99}
)
- 如果数据库中已经存在名字为
iPhone
的产品,那么更新该产品价格为699.99
,并返回更新后的产品product
和created=False
; - 如果数据库中不存在
iPhone
这个产品,则创建新的产品,并保存到数据库中,并返回创建的产品product
和created=True
。
以上就是 create_or_update()
函数的用法及两个示例说明。