Django 学习笔记 III:QuerySet 使用详解
最编程
2024-10-02 10:16:09
...
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中最新的对象。
示例
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语句。
上一篇: 如何恢复硬盘中丢失/删除的视频
推荐阅读
-
Django 学习笔记 III:QuerySet 使用详解
-
Qt SQL 学习笔记 III:qt 使用 INSERT 语句向表中插入数据
-
Linux设备驱动开发详解——学习笔记-设备驱动来联系。在没有操作系统的情况下,工程师可以根据硬件设备的特点自行定义接口。而在有操作系统的情况下,驱动的架构则由相应的操作系统来定义。驱动存在的意义就是给上层应用提供便利。 驱动针对的对象是存储器和外设。Linux将存储器和外设分为 3 个基础大类:字符设备、块设备、网络设备。 字符设备和块设备都被 Linux 映射到文件系统的文件和目录中,通过文件系统的接口(open、read、write、close等)来访问。其中,块设备可以通过类似 dd 命令对应的原始块设备来访问,也可以通过建立文件系统,以文件路径来访问。 学习 Linux 设备驱动,要求非常好的硬件基础、非常好的软件基础、一定的 Linux 内核基础和非常好的多任务并发控制和同步的基础。学习 Linux 设备驱动要将学习的函数、数据结构等放到整体架构中去理解,才能理清驱动中各组成部分之间的关系。 驱动设计的硬件基础 驱动工程师需要掌握 处理器、存储器、接口和总线、可编程门电路、原理图、硬件时序、芯片手册、仪器使用 等方面的内容。 处理器