IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 18.聚合查询和原生数据库语句操作 -> 正文阅读

[Python知识库]18.聚合查询和原生数据库语句操作

目录

1 聚合查询

1.1 聚合函数

1.2 整表聚合

1.3 分组聚合

2??原生数据库操作

2.1??仅查询 raw()

2.2??查询,更新与删除 cursor?

2.2.1??查询

2.2.2??更新

2.2.3??删除


1 聚合查询

聚合查询是统计性的查询,比如求某一个字段所有值的平均数,某一个字段的总数这种

聚合查询分整表查询与分组查询。整表查询是对表中所有数据进行查询。分组查询是先根据其他字段进行分组。

比如我现在表中有中国作者和外国作者,我现在想求书的平均价格,如果整表查询就是所有书的价格,如果分组查询就可以将中国作者平均价格与外国作者平均价格分开

我们下面依然使用这个数据表做例子

1.1 聚合函数

输入 from django.db.models import * 导入聚合函数

  • 这里可以写 from django.db.models import Sum,Avg 导入单个或某几个聚合函数

常用聚合函数有 Sum(求和),Avg(平均),Count(计数),Max(最大值),Min(最小值),注意聚合函数的首字母都是大写的

1.2??整表聚合

我们现在求price这一列的平均值

  • 表名称.objects.aggregate(结果变量名=聚合函数('列'))

发现平均值为70,返回值为字典,这里的结果变量名很像sql语句中的as

  • 截的是课程视频中写的代码,所以Count的结果是4,如果在我当前的mysql中写结果就是5

1.3??分组聚合

比如说我现在想求 所有出版社各自的平均price

  • 表名称.objects.values('以谁分组的列').annotate(结果变量名=聚合函数('统计谁的列'))

由于返回值是QuerySet,所以我们还可以接其他QuerySet的方法,比如我求出了每个出版社的平均price,我现在想查询平均price>70的

  • 这里的res是刚刚定义的变量名称

分组聚合对应的sql语句是having

2??原生数据库操作

2.1??仅查询 raw()

可以在django中使用数据库原本的查询语句,比如mysql中的sql语句

  • 模型名.objects.raw('原生语句')

上面的cmd是一个RawQuerySet对象

RawQuerySet对象可以对其进行循环或索引

我们一般不会使用原生数据库查询,因为查询一般是让用户进行查询,如果使用了sql语句,用户可以查询到许多其他的内容,比如

使用原生数据库语句查询容易被sql注入恶意查询,所以一般我们不用这种方式。如果我们确实要使用这种方式,django也有相应的防范方式

我们把要给用户输入的语句内容抠出来,放到第二个参数中,第二个参数是一个列表,可以传无限的参数,用逗号隔开就行

上面的直接拼接用户可以查到表中的所有内容,而使用这种方式用户只能查到一个内容

虽然在RawQuerySet中看起来语句是相同的,但其实有区别,如果用中括号的方式 or作为字符不会生效

2.2??查询,更新与删除 cursor?

是这样用的

2.2.1??查询

我们做个查询的例子

它会返回执行成功的语句数,它是返回不了查询结果的,所以更适合更新与删除

2.2.2??更新

我们下面做一个更新的例子,更新之前是这样的

现在我们把id为3的book_name改成 Flask

2.2.3??删除

下面我们做一个删除的例子,删除id为5的书

这里我们用真删除,假删除的实质还是更新

刷新之后发现id为5的数据没有了

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:24:12  更:2022-04-24 09:24:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:38:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码