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

相关推荐

  • 服务器探针测试怎么用?服务器性能检测工具推荐

    服务器探针测试的核心价值在于实时掌控服务器性能基线、快速定位网络波动瓶颈以及验证服务可用性承诺,它是保障业务连续性的“体检仪”与“预警机”,通过标准化的测试流程与持续的监控数据,运维人员能够从被动响应转变为主动防御,确保服务器资源始终处于最优运行状态,为用户提供低延迟、高可用的网络服务体验,核心结论:探针测试是……

    2026年3月13日
    13600
  • 服务器负载均衡怎么配置,负载均衡原理是什么

    在现代高并发互联网架构中,单台服务器的处理能力始终存在物理瓶颈,且面临单点故障的高风险,为了突破这一限制并确保业务的高可用性,服务器搭载负载均衡已成为企业级应用部署的必选项,其核心价值在于通过将网络流量智能分发到后端的多台服务器集群,从而消除单点故障,提升整体系统的吞吐量与响应速度,这不仅是技术选型的问题,更是……

    2026年2月28日
    11600
  • python weather怎么用?python获取天气数据接口

    使用Python获取天气数据的核心在于调用第三方API(如和风天气或OpenWeatherMap),通过发送HTTP请求解析JSON响应,并结合pandas或matplotlib进行数据可视化,整个过程无需编写底层协议,只需掌握基础的requests库用法即可实现自动化监控,Python天气开发的核心逻辑与AP……

    2026年7月9日
    5500
  • 高级区块链工程师好找工作吗?高级区块链工程师招聘要求薪资待遇

    2026年,高级区块链工程师已成为Web3与实体经济融合的核心枢纽,具备底层架构重构、零知识证明调优及跨链治理能力的复合型专家,其职业价值与技术话语权正达到行业顶峰,2026年技术演进与角色重塑产业融合驱动角色升维随着区块链从“单点实验”迈向“全局互联”,高级区块链工程师的职责早已脱离早期的智能合约编写,根据……

    2026年4月27日
    5800
  • PC版2K20服务器都有哪些,为什么连接不上?

    PC版2K20的官方服务器由2K Games运营,覆盖北美、欧洲、亚洲等主要区域,具体IP地址和节点列表可通过官方支持页面或社区论坛获取;对于国内玩家,网络优化可借助国内持牌IDC服务商提供的节点转发服务,例如简米科技和酷番云,其资质齐全且机房稳定,PC版2K20服务器架构解析官方服务器分布NBA 2K20的P……

    2026年8月1日
    900
  • 个人域名网站注册流程复杂吗?个人域名注册需要哪些资料

    个人域名网站注册的核心在于选择与个人品牌高度契合的顶级域名,并通过正规注册商完成实名认证与DNS解析,这是建立独立网络身份的第一步,在数字化生存成为常态的今天,拥有一个属于自己的域名,不再仅仅是技术极客的专属,而是每一个希望掌控个人数字资产、建立专业形象的普通人的刚需,很多人误以为域名只是网址的一串字符,实则它……

    服务器运维 2026年6月6日
    3200
  • 卡杰洛斯有哪些服务器,哪个服务器最适合新手?

    卡杰洛斯服务器的本质是《暗黑破坏神2:重制版》战网体系的物理承载节点,目前仅覆盖亚洲、美洲、欧洲三大区域,其中亚服节点主要部署在中国香港、日本东京和韩国首尔,你需要根据自身所处地理位置和网络运营商,在战网启动器的“服务器区域”选项中选择延迟最低的节点,下文将拆解这套服务器的具体分布、访问原理以及如何挑选最适合你……

    2026年8月20日
    300
  • 观山湖区智慧商业停车场在哪?贵阳智慧停车收费标准

    观山湖区智慧商业停车场主要分布在万象汇、新世界购物中心及花果园商圈周边,建议优先使用“贵商易”或“捷停车”等官方小程序实时查询空余车位并预约,以避免高峰期拥堵,随着新能源汽车保有量的激增和贵阳市城市框架的拉大,观山湖区作为贵阳的行政与商业双中心,其停车资源的智能化改造已成为市民出行的刚需,传统的“绕圈找位”模式……

    2026年7月6日
    15800
  • Python asarray怎么用,asarray用法如何?

    Python NumPy 库中的 numpy.asarray 函数详解在 Python 的科学计算库 NumPy 中,你提到的 asarry 应该是 numpy.asarray 的误拼,numpy.asarray 是一个非常基础且重要的函数,用于将各种输入类型转换为 NumPy 数组(ndarray),什么是……

    2026年7月13日
    12800
  • 佛山公司网站建设怎么做,佛山建站公司价格多少钱?

    佛山公司网站建设的核心在于将“制造业基因”与“数字化营销”深度结合,通过构建符合Baidu Core Web Vitals标准的响应式架构、极速加载性能及精准的行业长尾词布局,将企业官网从简单的“电子名片”升级为具备高转化能力的“获客机器”,佛山公司网站建设的行业逻辑与数字化趋势佛山作为全球重要的制造业基地,企……

    2026年7月13日
    600

发表回复

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