Django学习笔记三:QuerySet使用详解

Django的QuerySet是Django ORM中用于表示数据库查询结果集合的对象。它提供了丰富的方法来操作和查询数据库。以下是一些常用的QuerySet方法和操作的详解:

基本查询

  • filter(*args, **kwargs): 返回一个新的QuerySet,包含与给定参数匹配的对象。
  • exclude(*args, **kwargs): 返回一个新的QuerySet,包含与给定参数不匹配的对象。
  • annotate(*args, **kwargs): 使用提供的查询表达式列表对QuerySet中的每个对象进行注解。

高级查询

  • order_by(*fields): 用于对QuerySet的结果进行排序。
  • reverse(): 反转QuerySet中的顺序。

聚合查询

  • aggregate(*args, **kwargs): 对QuerySet计算聚合值,如平均值、总和等。

计数和存在性

  • count(): 返回QuerySet中的记录数。
  • exists(): 如果QuerySet包含任何结果,则返回True。

检索特定对象

  • get(*args, **kwargs): 返回与给定查找参数相匹配的唯一对象。如果找不到对象或找到多个对象,将分别抛出DoesNotExist或MultipleObjectsReturned异常。
  • first(): 返回QuerySet中的第一个对象,如果没有对象则返回None。
  • last(): 返回QuerySet中的最后一个对象,如果没有对象则返回None。

更新和删除

  • update(**kwargs): 对QuerySet中的记录执行SQL更新操作。
  • delete(): 删除QuerySet中的所有对象。

特殊方法

  • distinct(): 返回一个新的QuerySet,在其SQL查询中使用SELECT DISTINCT,消除查询结果中的重复记录。
  • values(*fields, **expressions): 返回一个包含指定字段的字典列表。
  • values_list(*fields, flat=False, named=False): 返回一个包含指定字段值的元组列表。

分批处理

  • iterator(chunk_size=None): 用于迭代查询结果,可以指定chunk_size来控制每次从数据库中获取的记录数。

聚合查询

  • earliest(*fields): 返回QuerySet中最早的对象。
  • latest(*fields): 返回QuerySet中最新的对象。

示例

python 复制代码
from django.db.models import Min, Max, Avg, Count

# 获取所有博客文章
entries = Entry.objects.all()

# 获取标题包含"Django"的博客文章
entries = Entry.objects.filter(title__contains="Django")

# 按发布日期排序
entries = entries.order_by('pub_date')

# 获取最早的和最新的博客文章
earliest_entry = Entry.objects.earliest('pub_date')
latest_entry = Entry.objects.latest('pub_date')

# 聚合查询,计算平均分
average_score = Entry.objects.aggregate(Avg('score'))

# 更新操作
Entry.objects.filter(is_published=False).update(is_published=True)

# 删除操作
Entry.objects.filter(is_published=False).delete()

QuerySet提供了非常灵活的方式来处理数据库操作,使得开发者可以使用Python代码来完成大部分数据库操作,而无需编写复杂的SQL语句。

相关推荐
宝绿特塑业再生科技1 小时前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
andrsted4 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
Alsn864 小时前
Windows 安装 Ollama 及本地模型部署
学习·1024程序员节
欣欣之王来了5 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
解决小子7 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
知识分享小能手8 小时前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
破芽8 小时前
learn-claude-code-s05-s11-学习笔记
笔记·学习
pipixia200338 小时前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
每天题库9 小时前
汽车维修工等级考试题库 理论实操核心考点一次梳理清
学习·安全·考试·题库·考证
神也畏惧菠萝9 小时前
想要学习Agent应用开发?:2026 AI Agent开发全栈通关路线
学习·langgraph·mcp协议·agent开发·rag架构·prompt高级工程