Flask聚合函数(基本聚合函数、分组聚合函数、去重聚合函数))
Flask聚合函数
1.基本聚合函数(sun/count/max/min/avg)
使用聚合函数先导入:from sqlalchemy import func
使用方法:
sun():func.sum
count():func.count
max()
min()
avg()
语法 注意:使用db.session.query()括号内必须要写东西,不能空着,不然都不知道从哪张表中查询数据
from sqlalchemy import func
db.session.query(func.聚合函数(实体类.属性)).all()
代码示例:
@app.route('/08-aggr')
def aggregat_views():
#查询Users实体中所有人平均年龄
result = db.session.query(func.avg(Users.age)).all()
return "聚合函数查询成功"
2.分组聚合查询 group_by
db.session.query(查询列,聚合列) ---query括号内的数据是查询最后展示的数据,列表套元组格式
.filter(条件) #分组前数据筛选 --- where filter括号内放的是查询的条件
.group_by("分组列名") #分组 --- group by group_by括号内放的是根据分组的列名
.having(条件) #分组后筛选 --- having having括号内也是放筛选条件,不过需要在分组之后才能使用
查询Users表中年龄大于18岁的,按照isActive分组,组内人数大于2人的组名和人数查询出来
db.session.query(
Users.isActive,func.count(Users.id))\ #----查询结果显示的数据字段:isActive,Users.id的聚合函数求和
.filter(Users.age>18)\ #筛选出年龄大于18的
.group_by("isActive")\ #根据isActive分组
.having(func.count(Users.id) >= 2) #分组之后再做筛选
分组统计数量 (展示分组的label_name,数量)
dbS.session.query(Label.label_name, func.count(Label.id)).filter(Label.ta == ta).group_by("label_name").limit(50).all()
练习
1.查询Users实体中年龄大于18岁的人的平均年龄
2.查询Users实体中按isActive分组后,每组的人数是多少
3.查询Users实体中按isActive分组后,组内人数大于2人的
4.查询Users标中年龄大于“QTX”的Users信息
#先filter筛选出age大于18的,然后使用func.avg求平均年龄
1.db.session.query(func.avg(Users.age)).filter(Users.age>18).all() #先根据isActive分组,使用func.count算出分组后每组的数量,结果是列表套元组[(isActive,数量)]
2.db.session.query(Users.isActive,func.count(Users.id)).group_by('isActive').all() 3.db.session.query(Users.isActive,func.count(Users.id)).group_by('isActive').having(func.count(Users.id>2)).all()
#子查询
4.db.session.query(Users).filter(Users.age>db.session.query(Users.age).filter(Users.username=="QTX")).all()
3.去重聚合函数 distinct
from sqlalchemy import distinct #去重后的标签名
labels=dbS.session.query(distinct(Label.label_name)).all()
#去重后的标签数量
label_distinct=dbS.session.query(func.count(distinct(Label.label_name))).all()
4.聚合函数的修改和删除
#1.修改小红的isActive的属性为True
#先查询出需要修改的对象,然后修改属性
user=db.session.query(Users).filter_by(username='小红').first()
user.isActive=True #2.删除姓名为小红的数据
user=db.session.query(Users).filter_by(username='小红').first()
db.session.delete(user)
5.基于实体类的查询
1.语法:实体类.query.查询过滤器函数().查询执行函数()
2.示例:
1.查询Users实体中所有的数据
users.query.all()
2.查询Users实体中isActive为True的数据
Users.query.filter_by(isActive=True).all()
Users.query.filter(Users.isActive==True).all()
比较db.session和实体类的查询不同点
#基于实体类查询
post_obj=Post.query.filter(Post.id==1).first() #db.session查询方式
post_test=db.session.query(Post.id,Post.title).filter(Post.id==1).first()
注意:db.session方式查询query中必须要写东西,因为要从query中获取从哪张表中查询
如果查询是多个结果就是列表套元组:[(id1,title1),(id2,title2),....]
db.session.query(模型类) 等价于 模型类.query ,db.session.query的功能更强大,可以进行多表查询
from sqlalchemy import func
Flask聚合函数(基本聚合函数、分组聚合函数、去重聚合函数))的更多相关文章
- EF架构~为分组添加位运算聚合方法
回到目录 我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系 ...
- MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)
聚合运算之group 语法: db.collection.group( { key:{key1:1,key2:1}, cond:{}, reduce: function(curr,result) { ...
- 按某个字段来分组、编号的row_number()函数
本文参考 http://zhidao.baidu.com/link?url=8su4F16Et8Q0S3FmybwniJSI51Ms0AeVujcEXhyEaZh3u5LlOng5Xri_9zHsl7 ...
- flask中重定向所涉及的反推:由视图函数反推url
flask中重定向所涉及的反推:由视图函数反推url 例如有视图index() 反推 url的/default # -*- coding: utf-8 -*- from flask import Fl ...
- 第六章 函数、谓词、CASE表达式 6-1 各种各样的函数
一.函数的种类 算术函数 字符串函数 日期函数 转换函数 聚合函数 二.算术函数 + - * / 1.ABS——绝对值 ABS(数值) 绝对值 absolute value ,不考虑数值的符号 ...
- 第三课 创建函数 - 从EXCEL读取 - 导出到EXCEL - 异常值 - Lambda函数 - 切片和骰子数据
第 3 课 获取数据 - 我们的数据集将包含一个Excel文件,其中包含每天的客户数量.我们将学习如何对 excel 文件进行处理.准备数据 - 数据是有重复日期的不规则时间序列.我们将挑战数 ...
- JS的数据类型判断函数、数组对象结构处理、日期转换函数,浏览器类型判断函数合集
工具地址:https://github.com/BothEyes1993/bes-jstools bes-jstools 100多个基础常用JS函数和各种数据转换处理集合大全,此工具包是在 outil ...
- JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
“JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...
- php中的常用数组函数(三)(获取数组交集的函数们 array_intersect()、array_intersect_key()、array_intersect_assoc()、array_intersect_uassoc()、array_intersect_ukey())
这5个获取交集的函数 有 5个对应的获取差集的函数.我是链接. array_intersect($arr1, $arr2); //获得数组同键值的交集 array_intersect_key($arr ...
随机推荐
- centos7 查看端口占用情况
2021-08-02 1. 查看端口占用情况 # 查看 8088 端口占用情况 lsof -i tcp:8088 # 若提示没有 lsof 命令, yum 安装一下 yum -y install ls ...
- Qt5之反射机制(内省)
Qt的元对象系统除了提供信号/槽机制的特性之外,它还提供了以下特性: QObject::metaObject() 返回关联的元对象 QMetaObject::className() 在运行时状态下返回 ...
- 安装或更新时,pip出错,“No module named ‘pip’”
解决办法: 在pycharm终端(Terminal)中 首先执行 :python -m ensurepip 然后执行 :python -m pip install --upgrade pip
- MongoDB(4)- Collection 集合相关
Collection MongoDB 将文档存储在集合中 集合存储在 Database 中 集合类似于关系数据库(Mysql)中的表 如果集合不存在,则 MongoDB 会在第一次存储该集合数据时创建 ...
- C#中的文本到语音
本演示说明了如何使用c#.net Windows Forms应用程序中的system.speech库将文本转换为语音.Microsoft .NET框架提供System.Speech.Synthesis ...
- C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】
多线程编程之锁的使用[互斥锁(lock)和读写锁(ReadWriteLock)] http://blog.csdn.net/sqqyq/article/details/18651335 多线程程序写日 ...
- mac下secureCRT的使用技巧
1.设置secureCRT不掉线的方法 Options->Global Options->General->Default Session->Edit Default Sett ...
- liunx常见指令
linux目录结构 bin:存储普通命令 sbin:存储超级命令 home:存储普通用户 root:存储超级用户 usr /usr/local:下存储数据或软件,通常软件都放在其中 tmp:临时目录 ...
- python matplotlib.pyplot 散点图详解(1)
python matplotlib.pyplot散点图详解(1) 一.创建散点图 可以用scatter函数创建散点图 并使用show函数显示散点图 代码如下: import matplotlib.py ...
- Shell系列(2)- 脚本执行方式
创建shell脚本 [root@localhost sh]# vim hello.sh shell脚本必须用.sh,同时方便文件管理 #!/bin/bash:shell文件第一行必须是这个,声明这个 ...