详解Django的 get() 函数:处理 GET 请求

  • Post category:Python

Django的get()函数是ORM(对象关系映射)中常用的一个方法,用来从数据库中获取满足条件的一条数据,如果找到则返回该数据对象,否则引发错误。

1. get() 函数的用法

get() 函数的语法如下:

Model.objects.get(**kwargs)

其中,get() 函数接受若干个关键字参数,这些关键字参数对应了在数据库中进行过滤的字段,比如:idnameemail。在调用 get() 函数时,Django 会根据给出的参数从数据库中寻找所有满足条件的数据。如果没有一条数据符合条件,就会抛出 DoesNotExist 异常;如果至少有两条数据符合条件,就会抛出 MultipleObjectsReturned 异常。

下面给出一个例子:假设我们有一个 Person 模型,包含了 nameage 两个属性。那么我们可以通过以下代码找到一条名为 “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 异常。