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

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

以下是关于 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')

✅ 使用 deferonly

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

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

✅ 使用 select_relatedprefetch_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_relatedprefetch_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

相关推荐

  • Python必学内容到底有哪些,怎么学最快最有效

    Python必学是当前技术从业者的共识,其核心价值在于语法简洁、生态丰富和应用广泛,掌握Python就等于掌握了通往高薪技术岗位的钥匙,Python必学内容清单:从基础到实战的必经之路如果你刚开始接触Python,可能会被各种库和框架弄得眼花缭乱,但无论你的目标是什么,以下内容都是Python必学的一部分,行业……

    2026年7月19日
    1300
  • 跑酷服务器哪些比较好玩,哪个服务器最推荐?

    优先选海外人气聚合服(The Hive、CubeCraft)和带公网IP的自建跑酷服,但最终体验取决于延迟与服务器Tick稳定性,跑酷在服务器端按20TPS的固定节奏判定跳跃,机房线路不好,再好的地图也会变成“跳跳乐受难服”,先给答案:这几个跑酷服务器确实好玩跑酷玩法对服务器的要求跟普通生存服完全不一样,生存服……

    2026年8月24日
    000
  • 哪些云服务器有SSL证书,选购时要注意什么?

    如果你正在寻找有SSL证书的云服务器,核心答案是:几乎所有主流的正规云服务商都已默认提供免费SSL证书或一键部署能力,但真正的分水岭在于服务器本身的安全合规性与资质背书, 你不需要纠结“有没有”,而应该关注“谁家的服务器在给你证书的同时,还能保证你的数据在法律和物理层面都安全”,识别靠谱的云服务器:从SSL证书……

    2026年8月11日
    800
  • 服务器按量计费特点及介绍,服务器按量计费划算吗

    服务器按量计费模式的核心优势在于极致的成本控制弹性与技术架构的敏捷适配能力,它将传统的固定资产投入转化为灵活的运营成本,特别适用于业务波动剧烈、处于发展初期或需要进行短期压力测试的场景,这种计费模式打破了传统包年包月的刚性限制,让企业能够根据实际业务负载实时调整资源,实现“按需索取,用完即止”,从而最大程度地规……

    2026年3月14日
    10800
  • 廖雪峰Python教程值不值得学,零基础怎么学Python

    Python lxf作为一套系统化的学习路径,能帮助初学者在2026年的技术浪潮中,高效掌握Python编程并应用于实际场景,从而增强职场竞争力,什么是Python lxf?Python lxf是一个专注于零基础到进阶的Python教学体系,它不像传统的教科书那样枯燥,而是通过项目驱动的模式,让你边做边学,近年……

    2026年7月22日
    700
  • 服务器崩溃不能重启怎么办,服务器无法启动的解决方法

    服务器崩溃后无法重启,通常意味着系统遭遇了底层硬件故障、关键系统文件损坏或严重的存储介质错误,此时盲目强制重启或频繁尝试通电,极大概率导致数据永久丢失或硬件二次损坏,必须立即停止操作并进行专业化排查,面对这种紧急情况,保持冷静、通过带外管理接口(IPMI/iDRAC)获取故障日志、并在保护现场的前提下制定恢复方……

    2026年4月5日
    9000
  • 服务器为什么每隔一段时间重启,服务器自动重启的原因有哪些?

    服务器每隔重启一次通常是由硬件稳定性缺陷、操作系统内核错误、内存溢出(OOM)或预设的任务调度任务引起的,必须通过分析系统日志、监控资源占用及检查硬件状态来定位根源,服务器频繁自动重启是什么原因及排查逻辑当服务器出现非预期重启时,首要任务是区分这是“定时任务触发的计划内重启”还是“系统故障引发的计划外重启”,硬……

    服务器运维 2026年7月14日
    700
  • 服务器开发要会什么软件?必备软件工具有哪些

    服务器开发是一项对技术栈深度与广度要求极高的工作,核心结论在于:服务器开发所需的软件体系,本质上是一套从底层操作系统掌控到上层架构设计的全链路工具集合,这不仅仅是简单的软件堆砌,而是要求开发者精通操作系统环境、代码构建工具、数据库管理系统、中间件软件以及运维监控平台,掌握这些软件的底层原理与实战操作,是构建高并……

    2026年3月28日
    7800
  • 服务器怎么修改登陆用户?具体操作步骤有哪些?

    服务器修改登录用户的核心在于精准区分操作系统环境,通过系统命令或图形界面工具,在确保权限安全的前提下完成用户信息的变更或替换,无论是Linux还是Windows环境,修改登录用户通常涉及更改用户名、调整用户组权限、重置密码或切换默认登录账户,操作的关键在于保障数据完整性与系统服务的连续性,避免因用户信息变更导致……

    2026年3月22日
    10100
  • 观光车视频监控存多久?监控视频存储时间规定

    观光车视频监控存储时间通常建议保持在30至90天,具体时长取决于景区安保等级、当地法规要求及存储硬件成本,一般景区至少需满足30天,而重点安防区域则建议延长至90天以上,在景区运营中,监控视频不仅是事后追责的证据,更是日常安全管理的“眼睛”,很多管理者常问,观光车监控视频保存多久才合规且划算?这并非一个固定的数……

    2026年7月7日
    7000

发表回复

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