Django的get()函数是ORM(对象关系映射)中常用的一个方法,用来从数据库中获取满足条件的一条数据,如果找到则返回该数据对象,否则引发错误。
1. get() 函数的用法
get() 函数的语法如下:
Model.objects.get(**kwargs)
其中,get()
函数接受若干个关键字参数,这些关键字参数对应了在数据库中进行过滤的字段,比如:id
、name
、email
。在调用 get()
函数时,Django 会根据给出的参数从数据库中寻找所有满足条件的数据。如果没有一条数据符合条件,就会抛出 DoesNotExist
异常;如果至少有两条数据符合条件,就会抛出 MultipleObjectsReturned
异常。
下面给出一个例子:假设我们有一个 Person
模型,包含了 name
和 age
两个属性。那么我们可以通过以下代码找到一条名为 “Alice”、年龄为 23 岁的记录:
from myapp.models import Person
try:
person = Person.objects.get(name="Alice", age=23)
except Person.DoesNotExist:
# 处理异常
2. get() 实现的示例
为了更好地理解get()
函数的使用方法,下面我们提供两个 get()
方法真实的示例。
实例1 – 获取单个对象
假设我们需要从数据库中获取一个给定 ID
值的 Person
对象。这时我们可以使用 get()
函数进行寻找。实际代码如下:
# 导入模块
from django.shortcuts import get_object_or_404
from myapp.models import Person
# 获取指定ID的记录
person = get_object_or_404(Person, id=1)
如果 ID 为 1 的记录不存在,将会返回一个 404 响应(默认)并抛出 Http404
异常。
实例2 – 处理多个对象
假设 Person
数据表里包含了两个名字分别为 “Alice” 的记录,并且我们正需要获得其中最小的一个。下面演示使用 order_by()
和 first()
方法获取最小的一条记录:
# 导入模块
from myapp.models import Person
# 查询并获取两条名字都是Alice的记录
people = Person.objects.filter(name="Alice").order_by("age")
# 如果记录不存在,则进行错误处理
if people.count() == 0:
# 错误处理
else:
# 获取最小的一个记录
person = people.first()
在上面的代码中,order_by("age")
用于按照 age
属性对结果集进行排序,然后 first()
方法将结果集的第一条记录返回给 person
变量。如果没有匹配到名字为 “Alice” 的记录,就会返回一个空结果集并需要做相应的错误处理。
3. 小结
本文中,我们介绍了 Django 中 get()
函数的使用方法及其实例。需要注意的是,当查询到的数据不存在时,get()
函数会抛出 DoesNotExist
,而查询得到的结果超过一条时,则抛出 MultipleObjectsReturned
异常。