get_or_create()是Django ORM中的一个非常实用的函数,其作用是在数据库中查询数据,如果存在则返回该数据对象,如果不存在则创建该数据对象并返回。下面就详细介绍一下get_or_create()的使用方法及其提供的便利。
函数定义
get_or_create()的定义为:
get_or_create(defaults=None, **kwargs)
函数接收的是关键字参数,其中kwargs
是用键值对的方式传递查询条件的,这些条件用于在数据库中查找需求数据。defaults
参数是可选的,当数据库中不存在符合条件的数据时,defaults
参数用于指定创建该数据时所要插入的默认值。
使用方法
在一个Django模型类中,我们可以使用get_or_create()方法轻松地实现数据的查找和插入,具体方法如下:
# 导入模型类
from myapp.models import MyModel
# 使用get_or_create()方法查询并创建数据,返回值为元组,第一个参数为查询到(或创建的)对象,第二个参数为标志符(True表示新建数据,False表示查找已存在数据)
obj, created = MyModel.objects.get_or_create(name='test', age=18, gender='male')
# 对象存在,仅仅进行查询
obj, created = MyModel.objects.get_or_create(name='test')
# 不存在该对象时,使用默认值创建
obj, created = MyModel.objects.get_or_create(name='test', defaults={'age': 20, 'gender': 'female'})
在上述代码中,我们以MyModel作为例子,展示其get_or_create()方法的基本使用方法。在第一次调用get_or_create()方法时,会首先去查询MyModel数据库中是否符合参数要求的对象,如果没有找到就在MyModel数据库中插入一条信息,如果找到了就返回该对象。如果用于查询的参数在MyModel数据库中并不存在,get_or_create()函数就会使用defaults参数来创建一个新的对象。
范例说明
下面将提供两个实例说明,解释get_or_create()方法在具体情境下的使用方法。
实例一:搜寻班级信息
假设现在我们要查询一个学生所在的班级信息。我们已经有了这个学生的学号和姓名,但不知道TA的班级信息。如果班级信息不存在于数据库中,我们还需要新建一个班级的数据。
# 导入班级和学生的的模型类
from myapp.models import ClassModel, StudentModel
# 查询学生所在班级,如果不存在就创建一个
class_obj, created = ClassModel.objects.get_or_create(name='Class 1', teacher='Teacher A')
# 查询学生信息
student_obj = StudentModel.objects.get(student_id='123456', name='Tom')
# 给学生对象绑定班级信息
student_obj.class_obj = class_obj
student_obj.save()
在上述代码中,我们使用了get_or_create()方法来查询班级信息,如果不存在就使用默认值创建出一个名称为“Class 1”,教师为“Teacher A”的班级,并将其绑定给这个学生对象。
实例二:创建唯一的用户信息
假设网站要求每个用户填写注册日志时必须填写唯一的 Email地址。如果该 Email 地址已经在数据库中存在,我们将返回用户数据;否则,我们将新建一个用户。
# 导入用户模型类
from myapp.models import UserModel
# 查询或创建用户信息
user_obj, created = UserModel.objects.get_or_create(email='test@gmail.com', defaults={'password': '123456'})
在上述代码中,我们使用了get_or_create()方法来查询用户信息,如果不存在,将以“test@gmail.com”作为 Email地址,以默认值‘123456’作为密码,在数据库创建一条新的用户数据;如果该邮箱地址已存在,将放回已有用户的数据。
结语
get_or_create()是一个Django ORM功能强大的函数,可以大大简化我们在编写代码时所需的工作量。同时,本文也提供了两个具体的实例来介绍get_or_create()的使用方法,希望对读者有所帮助。