Django中objects.all()、get()与filter()的区别详解

Chloe
Chloe
发布时间:2026-10-13| 4人浏览过
原创

本文深入解析Django ORM中objects.all()、get()与filter()的核心区别。all()返回QuerySet对象,支持惰性查询与迭代;get()直接执行SQL并返回单个Model实例,适用于精确查找;filter()则提供丰富的查询条件支持。文章详细列举了__exact、__contains等常用查询后缀及distinct去重用法,帮助开发者根据场景选择高效的数据获取方式。

前言

本文主要探讨Django框架中objects.all()、objects.get()以及objects.filter()这三个常用查询方法的具体差异。文中将提供详细的代码示例与原理分析,供开发者参考学习。

示例代码

ret=UserInfo.objects.all()

调用all()方法返回的是QuerySet对象。此时程序并未立即向数据库发送SQL查询语句,而是采用惰性加载机制。该对象支持迭代操作,可以通过for循环遍历获取数据。

ret=UserInfo.objects.get(id='1')

调用get()方法返回的是具体的Model对象实例。需要注意的是,原文描述其类型为列表存在误解,实际上get()会立即执行SQL语句从数据库中获取数据,并返回单个模型对象。若未找到或找到多条记录,会抛出异常。

ret=UserInfo.objects.filter()

filter()方法的执行逻辑与get()类似,会立即生成并执行SQL查询,但其优势在于支持更强大且灵活的复杂查询功能,可返回包含多个对象的QuerySet。

补充说明:

在构建QuerySet进行条件筛选时,filter()用于表示等于(=)条件的匹配,而exclude()则用于表示不等于(!=)条件的排除。

使用querySet.distinct() 方法可对查询结果进行去重处理。

  • __exact:精确等于,等同于SQL中的like 'aaa'。
  • __iexact:精确等于,忽略大小写,等同于SQL中的ilike 'aaa'。
  • __contains:包含子字符串,等同于SQL中的like '%aaa%'。
  • __icontains:包含子字符串,忽略大小写,等同于SQL中的ilike '%aaa%'。需注意,在SQLite数据库中,contains的效果通常等同于icontains。
  • __gt:大于指定值。
  • __gte:大于或等于指定值。
  • __lt:小于指定值。
  • __lte:小于或等于指定值。
  • __in:判断字段值是否存在于给定的列表范围内。
  • __startswith:以指定字符串开头。
  • __istartswith:以指定字符串开头,忽略大小写。
  • __endswith:以指定字符串结尾。
  • __iendswith:以指定字符串结尾,忽略大小写。
  • __range:判断字段值是否在指定的范围内。
  • __year:针对日期字段,筛选指定的年份。
  • __month:针对日期字段,筛选指定的月份。
  • __day:针对日期字段,筛选指定的日。
  • __isnull:通过设置True或False来判断字段是否为空。

总结

以上内容涵盖了Django中主要查询方法的特性与常用查询后缀。希望本文能协助大家更好地掌握Django ORM的使用技巧。如有任何疑问,欢迎留言交流,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。