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): 返回与给定查找参数相匹配的唯一对象。如果找不到对象或找到多个对象,将分别抛出DoesNotExistMultipleObjectsReturned异常。
  • 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语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/886281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis中String类型的常用命令(append,getrenge,setrange等命令)

Redis----String命令 前言.常见的String存储类型. 常见命令1. set 命令2. get 命令3. mget命令与mset命令4. setnx命令5. setex与psetex命令6. incr与incrby与incrbyfloat命令7. decr与decrby命令8. append命令9. getrange和setrange命令10. strlen命令. 前言. 常见的String存…

【Kubernetes】常见面试题汇总(四十五)

目录 102.使用 Kubernetes 时可以采取的最佳安全措施是什么? 103.什么是联合集群? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目…

高中教辅汇总【35GB】

文章目录 一、资源概览二、资源亮点三、获取方式 一、资源概览 这份教辅资源汇总,精心搜集了高中各学科的海量教辅资料,总容量高达35GB,覆盖了语文、数学、英语、物理、化学、生物、历史、地理、政治等所有必修及选修科目。从基础知识点到难…

插槽slot在vue中的使用

介绍 在 Vue.js 中,插槽(slot)是一种用于实现组件内容分发的功能。通过插槽,可以让父组件在使用子组件时自定义子组件内部的内容。插槽提供了一种灵活的方式来组合和复用组件。 项目中有很多地方需要调用一个组件,比…

【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)

目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点: 伪元素补充文本溢出属性转换 没有基础的朋友&#xff…

【Docker】配置文件

问题 学习Docker期间会涉及到docker的很多配置文件,可能会涉及到的会有: /usr/lib/systemd/system/docker.service 【docker用于被systemd管理的配置文件】 /etc/systemd/system/docker.service.d【覆盖配置文件的存放处】 /etc/systemd/system/mul…

网页前端开发之Javascript入门篇(4/9):循环控制

Javascript循环控制 什么是循环控制? 答:其概念跟 Python教程 介绍的一样,只是语法上有所变化。 参考流程图如下: 其对应语法: var i 0; // 设置起始值 var minutes 15; // 设置结束值(15分钟…

VMware Aria Operations for Networks 6.13 发布,新增功能概览

VMware Aria Operations for Networks 6.13 - 网络和应用监控工具 请访问原文链接:https://sysin.org/blog/vmware-aria-operations-for-networks/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VMware Aria Oper…

Golang | Leetcode Golang题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; func getSteps(cur, n int) (steps int) {first, last : cur, curfor first < n {steps min(last, n) - first 1first * 10last last*10 9}return }func findKthNumber(n, k int) int {cur : 1k--for k > 0 {steps : getSteps(cu…

Llama 系列简介与 Llama3 预训练模型推理

1. Llama 系列简介 1.1 Llama1 由 Meta AI 发布&#xff0c;包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型 数据集&#xff1a;模型训练数据集使用的都是开源的数据集&#xff0c;总共 1.4T token 模型结构&#xff1a;原始的 Transformer 由编码器&#xff08…

C++入门基础 (超详解)

文章目录 前言1. C关键字2. C的第一个程序3. 命名空间3.1 namespace的定义3.2 命名空间的嵌套3.3 命名空间使用3.4 查找优先级总结 4. C输入和输出4.1 标准输入输出 (iostream库)4.2 文件输入输出 (fstream库)4.3 字符串流 (sstream库)4.4 C格式化输出4.5 std::endl和\n的区别 …

56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录门控循环单元&#xff08;GRU&#xff09;门控隐状态重置门和更新门候选隐状态隐状态 从零开始实现初始化模型参数定义模型训练与预测 简洁实现小结练习 门控循环单元&#xff08;GRU&#xff09; 之前我们讨论了如何在循环神经网络中计算梯…

生信初学者教程(二十三):REF+SVM筛选候选标记物

文章目录 介绍加载R包导入数据准备数据机器学习特征筛选数据分割基础模型Recursive Feature Elimination特征筛选调参最终分类模型测试集验证标记基因输出结果总结介绍 采用了REF(Recursive Feature Elimination) 结合 SVM(Support Vector Machine) 的方法,对差异基因(参…

探索未来:hbmqtt,Python中的AI驱动MQTT

文章目录 **探索未来&#xff1a;hbmqtt&#xff0c;Python中的AI驱动MQTT**1. 背景介绍2. hbmqtt是什么&#xff1f;3. 安装hbmqtt4. 简单的库函数使用方法4.1 连接到MQTT服务器4.2 发布消息4.3 订阅主题4.4 接收消息4.5 断开连接 5. 应用场景示例5.1 智能家居控制5.2 环境监测…

react-问卷星项目(4)

项目实战 使用CSS 尽量不要使用内联CSS 内联style代码多&#xff0c;性能差&#xff0c;扩展性差外链css文件可复用代码&#xff0c;可单独缓存文件 元素内联style 和HTMl元素的style相似必须用JS写法&#xff0c;不能是字符串&#xff0c;里面必须是对象 <span style…

实现epoll事件的两种模型(ET/LT)、epoll反应堆模型

前置知识&#xff1a; 多进程/线程并发服务器、多路I/O转接服务器的简单实现-CSDN博客 1. 事件模型 EPOLL事件有两种模型&#xff1a; Edge Triggered (ET) 边缘触发只有数据到来才触发&#xff0c;不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会…

C++基类构造器的自动调用

C基类构造器的自动调用 虽然基类的构造器和解构器不会被派生类继承&#xff0c;但它们会被派生类的构造器和解构器自动调用&#xff0c;今天我们用代码实证一下。 验证代码 源代码&#xff0c;仔细看注释内容&#xff1a; D:\YcjWork\CppTour>vim c2004.cpp #include &l…

Ubuntu下安装Zookeeper集群

Zookeeper集群是一个开源的分布式协调服务系统&#xff0c;它由Apache软件基金会维护&#xff0c;旨在为分布式应用提供一致性和可靠性的服务。 在Zookeeper集群中&#xff0c;服务器可以扮演三种角色——领导者&#xff08;Leader&#xff09;、跟随者&#xff08;Follower&a…

如何使用ssm实现基于HTML的中国传统面食介绍网站的搭建+vue

TOC ssm758基于HTML的中国传统面食介绍网站的搭建vue 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔…

Python和C++混淆矩阵地理学医学物理学视觉语言模型和算法模型评估工具

&#x1f3af;要点 优化损失函数评估指标海岸线检测算法评估遥感视觉表征和文本增强乳腺癌预测模型算法液体中闪烁光和切伦科夫光分离多标签分类任务性能评估有向无环图、多路径标记和非强制叶节点预测二元分类评估特征归因可信性评估马修斯相关系数对比其他准确度 Python桑…