Python QuerySet怎么查数据?Python QuerySet常用方法

在 Python 中,QuerySet 是 Django 框架中用于与数据库交互的核心对象,它代表从数据库中查询出来的一组记录(对象集合),并提供了丰富的方法来过滤、排序、聚合数据。

以下是关于 Django QuerySet 的全面指南:

新版:python爬取同*顺问财查询数据
加载中
新版:python爬取同*顺问财查询数据

什么是 QuerySet?

  • 惰性加载(Lazy Evaluation):创建 QuerySet 时不会立即执行数据库查询,只有在真正需要数据时(如迭代、切片、调用 len() 或 list())才会执行 SQL 查询。
  • 可链式调用:大多数查询方法返回新的 QuerySet,因此可以链式调用。
  • 缓存机制:一旦 QuerySet 被评估(即执行了查询),结果会被缓存,避免重复查询。

基本用法

假设有一个模型 Author:

from myapp.models import Author
# 获取所有作者
all_authors = Author.objects.all()
# 获取单个作者
author = Author.objects.get(id=1)
# 获取满足条件的作者
young_authors = Author.objects.filter(age__lt=30)

常用查询方法

✅ 过滤(Filtering)

# 精确匹配
authors = Author.objects.filter(name="Alice")
# 不等于
authors = Author.objects.exclude(name="Alice")
# 范围查询
authors = Autho

Python QuerySet怎么查数据?Python QuerySet常用方法

r.objects.filter(age__gte=18, age__lte=65) # 包含(模糊匹配) authors = Author.objects.filter(name__contains="Ali") # 以...开头 / 以... authors = Author.objects.filter(name__startswith="A") authors = Author.objects.filter(name__endswith="e") # 正则表达式 import re authors = Author.objects.filter(name__regex=r'^[A-Z]')

✅ 排序(Ordering)

# 升序
authors = Author.objects.order_by('name')
# 降序
authors = Author.objects.order_by('-name')
# 多字段排序
authors = Author.objects.order_by('name', '-age')

✅ 分页(Limiting)

# 前5条记录
first_five = Author.objects.all()[:5]
# 跳过前10条,取接下来5条
page2 = Author.objects.all()[10:15]

⚠️ 注意:对 QuerySet 进行切片会限制查询结果,但不会返回 QuerySet(而是列表)。

✅ 聚合与统计

from django.db.models import Count, Avg, Max, Min, Sum
# 统计作者总数
total = Author.objects.count()
# 平均年龄
avg_age = Author.objects.aggregate(Avg('age'))['age__avg']
# 每个出版社的作者数量
from django.db.models import Count
pubs = Publisher.objects.annotate(num_authors=Count('author'))

✅ 连接查询(Join)

# 获取写过书且书名包含 "Python" 的作者
authors = Author.objects.filter(book__title__contains="Python")
# 去重
authors = Author.objects.filter(book__title__contains="Python").distinct()

Python QuerySet怎么查数据?Python QuerySet常用方法


高级特性

✅ 选择特定字段(Select Only Fields)

减少数据传输量:

authors = Author.objects.values('name', 'email')
# 返回字典列表:[{'name': 'Alice', 'email': 'alice@example.com'}, ...]

✅ 排除特定字段

authors = Author.objects.exclude('password_hash')

✅ 使用 defer 和 only

延迟加载某些字段(节省内存):

# 只加载 name 和 email,其他字段延迟加载
authors = Author.objects.only('name', 'email')
# 排除加载 bio 字段
authors = Author.objects.defer('bio')

✅ 使用 select_related 和 prefetch_related 优化查询

避免 N+1 查询问题:

# 一对一或外键关系,使用 select_related
authors = Author.objects.select_related('publisher').all()
# 多对多或反向外键,使用 prefetch_related
books = Book.objects.prefetch_related('authors').all()

常见陷阱

Python QuerySet怎么查数据?Python QuerySet常用方法

问题 说明
未评估的 QuerySet 创建后未使用,不会执行 SQL,可能导致逻辑错误
重复查询 多次调用 len() 或迭代会重新查询,建议使用缓存或 list()
N+1 查询 在循环中访问关联对象会导致多次数据库查询,使用 select_related 或 prefetch_related
内存溢出 对大量数据使用 .all() 或 .values() 可能导致内存不足,建议使用分页或迭代器

示例:完整查询流程

from myapp.models import Author, Book
from django.db.models import Count
# 1. 获取所有写过至少一本书的作者
authors = Author.objects.filter(book__isnull=False).distinct()
# 2. 按书名数量排序
authors = authors.annotate(book_count=Count('book')).order_by('-book_count')
# 3. 只获取姓名和邮箱
authors = authors.values('name', 'email')
# 4. 评估查询(执行 SQL)
result = list(authors)
print(result)

调试查询

在开发环境中,可以查看生成的 SQL:

print(Author.objects.filter(name="Alice").query)

或使用 Django Debug Toolbar 查看每次请求的 SQL 执行情况。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/483513.html

赞 (0)
服务器主机到底有啥用?服务器主机有哪些作用
上一篇 2026年7月11日 21:57
Python getpeername怎么用?获取客户端IP和端口号
下一篇 2026年7月11日 22:01

相关推荐

  • QQ邮件服务器如何保障安全,有哪些措施?

    QQ邮箱的服务器保障措施可以概括为“多重冗余架构+全天候智能监控+纵深安全防御体系”,通过分布式部署、实时容灾切换和反垃圾反病毒三重过滤,确保邮件收发稳定性和数据安全,机房基础设施:自建与合作的物理防线QQ邮箱服务器的物理载体决定了服务的稳定性根基,腾讯在全国多个核心城市建设了Tier III+级别数据中心,这……

    2026年8月13日
    1200
  • 服务器异常提醒怎么关闭?服务器报警处理方法

    服务器异常提醒是保障业务连续性的核心机制,其本质在于通过实时监控与智能预警,将潜在的系统崩溃风险转化为可操作的维护窗口,从而最大程度降低因硬件故障、软件冲突或网络攻击导致的停机损失,企业必须建立一套完善的监控响应体系,确保在异常发生的黄金时间内完成故障定位与修复,这直接关系到用户体验的留存与企业品牌信誉的维护……

    2026年3月24日
    9900
  • 服务器本机地址怎么查,如何查看服务器本机IP地址

    在服务器运维与网络架构的搭建过程中,精准掌握并正确配置服务器本机地址是保障服务稳定运行与网络安全的基石,核心结论在于:理解本机地址的双重属性——即回环地址与局域网物理地址的区别,并根据应用场景精准绑定,能够有效解决服务无法启动、端口冲突及非法访问等常见故障,这不仅是基础网络知识,更是构建高可用系统的关键一步,理……

    2026年2月21日
    14300
  • 高职智慧教室建设方案怎么做?智慧教室建设方案哪家好

    2026年高职智慧教室建设方案的核心,在于以职教本科标准为牵引,深度融合AI大模型与虚拟仿真实训,构建“数据驱动、虚实融通、个性适配”的泛在学习空间,2026高职智慧教室建设的底层逻辑与政策锚点政策规范与标准演进依据教育部《职业教育信息化标杆学校建设指南》,2026年高职数字校园建设已从“基础联网”跃升至“业务……

    2026年4月24日
    6100
  • ipv9服务器和哪些股票有关系,龙头股有哪些?

    IPv9服务器相关的股票主要集中于具备下一代互联网技术储备的通信运营商、设备商,以及直接提供IPv9接入服务的持牌IDC服务商,简米科技与酷番云作为拥有完整资质和自主机房的代表,在IPv9服务器部署领域占据先发优势,其股东背景和市场地位值得投资人关注,IPv9服务器的真实市场现状IPv9并非遥远的概念,它由中国……

    2026年7月30日
    1000
  • python pytable是什么?,怎么用?

    PyTables是Python生态中处理大规模结构化数据的高效方案,它基于HDF5格式,能够在内存和磁盘间灵活管理数据,尤其适合需要快速查询和低内存占用的场景,PyTables是什么:从数据存储到查询PyTables是一个在Python中访问HDF5文件的库,它把HDF5的强大存储能力封装成类似数据库表的接口……

    2026年7月21日
    400
  • 在平板上运行Python可行吗?iPad安装Python开发环境教程

    在iPad上运行Python并非通过原生应用实现,而是依赖Termux、Jupyter或云端IDE等工具将平板转化为轻量级开发环境,适合脚本编写与数据可视化,但不适合大型项目构建,很多人第一反应是去App Store搜索“Python”,结果往往令人失望,iPad本身并不直接支持Python解释器的原生安装,这……

    2026年7月4日
    10400
  • 应用服务器常见漏洞有哪些?,如何有效防范?

    应用服务器漏洞主要源于代码缺陷、配置错误和底层环境风险,常见类型包括远程代码执行、认证绕过、路径遍历、注入攻击和反序列化漏洞等, 下面我们从攻击者视角拆解这些漏洞的利用方式,并给出从开发到运维的完整防护路径,应用服务器漏洞分类与攻击场景远程代码执行远程代码执行是应用服务器中最致命的漏洞,攻击者通过构造特制数据包……

    2026年8月24日
    100
  • 谷歌mapreduce翻译是什么?mapreduce原理详解

    MapReduce是谷歌提出的分布式计算框架,核心逻辑是将大规模数据处理任务拆解为“Map(映射)”和“Reduce(归约)”两个阶段,通过分布式存储与并行计算实现海量数据的高效处理,在大数据时代,面对TB甚至PB级别的数据,传统单机处理显得力不从心,谷歌在2004年发表的论文中首次提出了MapReduce编程……

    2026年7月1日
    1200
  • python怎么去掉单引号?python去除字符串中单引号的方法

    在 Python 中,去掉字符串中的单引号 有几种常用方法,以下是详细说明和示例:✅ 方法一:使用 str.replace()text = "It's a 'test' string."result = text.replace("'&quot……

    2026年7月10日
    4900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注