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://idctop.com/python-queryset%e6%80%8e%e4%b9%88%e6%9f%a5%e6%95%b0%e6%8d%ae%ef%bc%9fpython-queryset%e5%b8%b8%e7%94%a8%e6%96%b9%e6%b3%95/

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

相关推荐

  • 服务器常用的操作系统有哪些,服务器系统选哪个好

    在服务器运维与技术架构选型中,Linux 发行版占据了绝对的主导地位,是企业级应用的首选,而 Windows Server 则在特定生态与图形化需求场景下不可或缺,选择服务器操作系统并非单纯的“好坏”之分,而是基于业务生态、技术栈、运维成本与安全性的战略决策,核心结论在于:对于追求高稳定性、高性能与开源可控的互……

    2026年4月2日
    10100
  • 服务器换内存点不亮怎么办?内存条不兼容解决方法

    服务器更换内存后无法开机(点不亮),核心原因通常集中在内存兼容性故障、安装接触不良、内存插槽损坏或内存规格不匹配这四大维度,解决该问题的逻辑顺序应为:先排查物理安装与接触问题,再验证内存兼容性,最后深入检测硬件故障,绝大多数所谓的“损坏”其实是安装不到位或规格不匹配导致的假性故障,通过规范的重插、清CMOS或匹……

    2026年3月13日
    19500
  • 如何为服务器添加域名,服务器绑定域名怎么操作

    给服务器添加域名,核心就三步:先把域名解析到服务器IP,再在Web服务器上绑定域名,最后处理HTTPS和备案,这三步缺一不可,但顺序错了容易踩坑,下面按实际操作顺序拆解整个流程,每个环节都有具体命令和路径,为服务器添加域名前需要准备哪些?动手配置之前,最好先花两分钟确认三样东西:域名、服务器IP、还有你对服务器……

    2026年9月15日
    200
  • 双路处理器服务器有哪些

    双路处理器服务器是指支持两颗物理CPU同时工作的服务器,主流产品集中在戴尔PowerEdge R750/R650、浪潮NF5280M6、HPE ProLiant DL380 Gen10/Gen11、联想ThinkSystem SR650、华为FusionServer Pro 2288H等型号,它们普遍搭载Int……

    2026年8月26日
    800
  • 服务器怎么弄网站?新手搭建网站详细步骤教程

    搭建网站的核心在于将服务器环境配置、网站程序部署与域名解析三者进行有机整合,对于大多数企业站和个人博客而言,选择Linux系统配合宝塔面板是目前效率最高、门槛最低的技术方案,能够实现可视化的服务器管理,从而快速解决服务器怎么弄网站这一技术难题, 服务器环境搭建:构建网站的稳固地基服务器是网站运行的物理载体,环境……

    2026年3月17日
    10800
  • 服务器建站流程是怎样的?服务器搭建网站详细步骤教程

    服务器建站流程的核心在于“环境部署、程序安装、安全配置”三大环节的精准执行,而非简单的文件上传,一个成功的网站,必须建立在稳定的服务器环境、高效的建站程序以及严密的安全防护之上,对于初学者而言,选择可视化面板管理服务器是提升效率、降低技术门槛的最佳方案, 前期准备:服务器选购与域名解析建站的第一步是基础设施的搭……

    2026年4月8日
    8300
  • 个人域名用公司icp备案可以吗?个人域名备案需要哪些材料

    个人域名使用公司ICP备案在技术上可行,但存在极高的合规风险与法律隐患,强烈建议个人域名务必使用个人主体进行备案,切勿借用公司资质“借壳”备案,很多站长在搭建个人博客或小型展示站时,常因个人备案资料不全或流程繁琐,产生“借用公司ICP备案”的念头,这种操作看似能绕过审核门槛,实则是踩在监管红线边缘,一旦被发现……

    服务器运维 2026年6月8日
    6500
  • OpenStack虚拟机CPU性能咋优化?有哪些监控方法?

    OpenStack虚拟机CPU性能优化与监控,核心思路就两条:宿主机层面做好NUMA感知和CPU绑定,虚拟机内部做好中断和频率调优;监控层面则紧盯CPU steal time和vCPU ready time两个关键指标,OpenStack虚拟机CPU性能优化,为什么要先管宿主机调度?绝大多数OpenStack部……

    2026年9月3日
    300
  • 高端移动app开发报价是多少?高端app开发费用怎么算

    2026年高端移动app开发报价通常在50万至300万人民币之间,最终定价取决于架构复杂度、AI原生能力融合度及安全合规标准,绝非简单功能堆砌的量化计算,2026年高端App开发报价全景拆解核心成本结构透视根据中国软件行业协会2026年Q1发布的《移动应用开发服务指数报告》,高端定制的成本构成已发生结构性偏移……

    2026年4月28日
    5500
  • 佛山物理服务器租用怎么起租?,需要多少钱?

    佛山物理服务器租用的起租流程通常包括选择配置、提交订单、实名认证和支付,服务商会快速上架交付,整个周期一般在1-3个工作日内完成,佛山物理服务器租用前需要明确哪些需求业务场景决定配置选择不同业务对物理服务器的要求差异很大,如果你打算部署高并发游戏或视频转码任务,CPU核心数和内存带宽就是首要指标,如果做数据存储……

    2026年8月12日
    400

发表回复

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