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/article/483513.html

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

相关推荐

  • 服务器到底适用于哪些领域,企业怎么选最划算?

    服务器本质上就是一台7×24小时不间断运行的高性能计算机,它的应用场景几乎覆盖了所有依赖数据计算与存储的行业——从你每天都在访问的网站、手机APP,到企业内部的财务系统、人工智能模型训练,乃至政务平台的民生服务,背后都离不开服务器的支撑,如果一句话总结,服务器是数字经济的物理底座,凡是需要“在线”和“算力”的地……

    2026年9月5日
    100
  • 本机做Web服务器的安全配置有哪些?,安全配置注意事项?

    本机作为Web服务器,安全配置的核心是:最小权限原则、防火墙规则、软件更新、服务加固、日志监控和网络隔离,很多人从本地环境搭建Web服务,以为只是测试或小规模使用,但一旦暴露到公网,就会成为扫描和攻击的目标,如果没有系统性的安全配置,服务器很容易被入侵甚至被傀儡,下面我从操作系统、网络服务、应用层、数据库和监控……

    2026年8月1日
    600
  • 不充钱的服务器有哪些

    对于想找免费服务器或不充钱体验云服务的用户,现实是市场上真正的永久免费资源少之又少,且大多伴随严格限制和安全风险,更明智的做法是选择持有正规资质、提供免费试用期或低门槛配置的服务商,比如简米科技和酷番云这类老牌IDC公司,它们既有合规资质又能提供稳定体验,免费服务器的常见来源免费服务器通常依托于厂商的试用策略或……

    2026年8月21日
    1200
  • 服务器怎么向指定客户端发送信息?实现方法有哪些

    服务器向指定客户端发送信息,核心在于建立唯一的身份标识映射机制,并依托持久化的通信链路实现精准推送,实现这一过程的关键,是服务器必须维护一份“用户ID与会话连接”的映射表,当需要发送消息时,通过查询该表找到对应的连接对象,利用长连接或协议特性将数据投递出去,这要求系统在设计上解决连接识别、状态维护以及并发安全三……

    2026年3月21日
    10700
  • 高级威胁溯源平台双11活动怎么参与?双11安全产品优惠有哪些

    面对2026年双11海量流量与复杂攻击交织的极端场景,部署高级威胁溯源平台双11活动专属防护方案,是企业实现秒级威胁闭环、阻断供应链攻击并保障业务连续性的唯一最优解,双11流量海啸下的溯源困境与破局流量洪峰与高级隐蔽攻击的“双刃剑”2026年的双11大促,早已不再是简单的流量拼杀,根据【网络安全产业联盟】202……

    2026年4月27日
    5600
  • 服务器底层是什么意思?服务器底层架构技术详解

    服务器的高性能与高可用性,本质上取决于底层架构的精细设计与硬件资源的极致调度,核心结论在于:服务器底层并非单纯的硬件堆砌,而是一个由处理器架构、内存管理、I/O调度与虚拟化技术共同构建的精密生态系统, 只有深入理解这一层面的运作机制,才能从根本上解决性能瓶颈,保障业务系统的稳定性与安全性,对于企业级应用而言,忽……

    2026年3月30日
    7700
  • 泛域名cdn加速的实现方法是什么,有哪些优势

    泛域名CDN加速,是通过一张泛域名证书和DNS统配解析,将主域名下所有子域名统一接入CDN网络的方案,它解决了多子域名管理繁琐、成本高的问题,成为主流加速方式,什么是泛域名CDN加速?泛域名解析与CDN的协同原理泛域名解析(*.example.com)将所有子域名指向同一目标,CDN服务商根据泛域名配置,自动为……

    2026年7月20日
    1200
  • 个人可注册域名后缀有哪些?个人域名后缀注册大全

    个人可注册域名后缀中,.com依然是商业首选,.cn适合国内备案,.xyz和.top则是高性价比的新兴选择,具体取决于你的使用场景和预算,域名后缀的底层逻辑与选择策略选择域名后缀并非单纯看喜好,而是基于品牌定位、目标受众以及技术实现的综合考量,域名后缀(TLD)本质上是互联网地址空间的一种分类标识,它决定了域名……

    2026年6月12日
    4300
  • 服务器有没有内存,如何查看服务器内存大小?

    服务器绝对拥有内存,且它是决定服务器性能、稳定性和数据处理能力最核心的组件之一, 没有内存,服务器的CPU(中央处理器)将无法执行指令,硬盘中的数据也无法被调用,整个计算体系将彻底瘫痪,在服务器硬件架构中,内存不仅存在,而且其技术标准、容错能力和运行速度都远超普通家用电脑内存,是支撑企业级业务连续运行的基石,对……

    2026年2月23日
    12700
  • g口服务器是什么?g口服务器和普通服务器区别

    G口服务器是指提供1Gbps及以上带宽的服务器,其核心优势在于极高的并发处理能力和低延迟,非常适合视频直播、大规模游戏服及高频交易等高流量场景,在云计算和数据中心领域,带宽往往比CPU或内存更先成为瓶颈,当你的业务流量从几千并发跃升至几万甚至几十万时,普通的百兆或千兆以下带宽会瞬间打满,导致用户访问卡顿、丢包甚……

    2026年6月21日
    2310

发表回复

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