Django中的update_or_create()函数可以用于更新或创建数据库中的记录。如果数据库中存在符合更新条件的记录,则更新该记录的值;反之,如果没有符合条件的记录,则新建一个记录。下面详细介绍update_or_create()函数的用法:
1. 函数格式
update_or_create()函数的格式如下:
update_or_create(defaults=None, **kwargs)
- defaults:表示要更新的字段及其值所组成的字典;
- kwargs:表示过滤记录的条件,它们的形式是键值对,例如
name='Jack'
、age=23
等等。
2. 使用方法
例如,下面是一个用户模型类:
class User(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
假设数据表中已经有一个名字为'Jack'的用户,现在要更新这个用户的年龄为33,可以使用下面的代码:
user, created = User.objects.update_or_create(name='Jack', defaults={'age': 33})
其中,user
是更新或者创建的用户对象,created
是一个布尔值,指示该对象是否是新创建的。如果用户存在,那么user
是已有的用户对象;如果用户不存在,那么user
是新创建的用户对象。这个代码与下面的代码是等价的:
user = User.objects.filter(name='Jack').first()
if user is None:
user = User(name='Jack', age=33)
else:
user.age = 33
user.save()
再举一个例子:有一个书籍模型类Book,其字段如下:
class Book(models.Model):
name = models.CharField(max_length=100)
author = models.CharField(max_length=20)
pub_date = models.DateField()
假设需要更新一本书的信息,如果这本书存在,则只需更新它的作者和出版日期;如果它不存在,则新建一本书,请使用下面的代码:
book, created = Book.objects.update_or_create(
name='Python编程从入门到实践',
defaults={'author': 'Eric Matthes', 'pub_date': datetime.date(year=2016, month=6, day=30)}
)
3. 注意事项
- 使用update_or_create()函数时,kwargs中的过滤条件必须是唯一的,否则会抛出MultipleObjectsReturned或DoesNotExist异常;
- 如果你使用update_or_create()函数更新了一个已有的记录,其中的defaults字段值会覆盖原来的字段值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 update_or_create() 函数:更新或创建对象 - Python技术站