django objects.get 和 objects.filter的区别
时间: 2023-09-14 09:11:59 浏览: 122
Django跳坑:objects.all()、objects.get()与objects.filter()之间的区别
5星 · 资源好评率100%
`objects.get()` 和 `objects.filter()` 是 Django ORM 中两个常用的查询方法,它们的区别在于:
1. 返回值:`get()` 方法返回单个对象,如果找不到或者找到多个,会抛出 `DoesNotExist` 或 `MultipleObjectsReturned` 异常;而 `filter()` 方法返回一个 QuerySet 对象,它可以包含多个对象。
2. 使用方式:`get()` 方法可以直接使用查询条件,例如 `Model.objects.get(id=1)`,而 `filter()` 方法需要使用关键字参数来指定查询条件,例如 `Model.objects.filter(id=1)`。
3. 惰性执行:`filter()` 方法返回的是 QuerySet 对象,只有当你真正需要使用其中的数据时,才会执行真正的查询。而 `get()` 方法会立即执行查询。
举个例子:
假设我们有一个名为 `Person` 的模型,其中有 `name` 和 `age` 两个字段。如果要查询年龄为 20 岁的人,可以使用以下两种方式:
```python
# 使用 get() 方法
person = Person.objects.get(age=20)
# 使用 filter() 方法
people = Person.objects.filter(age=20)
```
如果年龄为 20 岁的人只有一个,那么使用两种方法都可以得到相同的结果。但如果有多个人的年龄为 20 岁,使用 `get()` 方法会抛出异常,而使用 `filter()` 方法会返回包含多个人的 QuerySet 对象。
总的来说,`get()` 方法适用于查询单个对象,而 `filter()` 方法适用于查询多个对象或者使用链式查询。
阅读全文