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聚合函数(基本聚合函数、分组聚合函数、去重聚合函数))的更多相关文章

  1. EF架构~为分组添加位运算聚合方法

    回到目录 我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系 ...

  2. MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)

    聚合运算之group 语法: db.collection.group( { key:{key1:1,key2:1}, cond:{}, reduce: function(curr,result) { ...

  3. 按某个字段来分组、编号的row_number()函数

    本文参考 http://zhidao.baidu.com/link?url=8su4F16Et8Q0S3FmybwniJSI51Ms0AeVujcEXhyEaZh3u5LlOng5Xri_9zHsl7 ...

  4. flask中重定向所涉及的反推:由视图函数反推url

    flask中重定向所涉及的反推:由视图函数反推url 例如有视图index() 反推 url的/default # -*- coding: utf-8 -*- from flask import Fl ...

  5. 第六章 函数、谓词、CASE表达式 6-1 各种各样的函数

    一.函数的种类 算术函数 字符串函数 日期函数 转换函数 聚合函数   二.算术函数 + - * /   1.ABS——绝对值 ABS(数值) 绝对值 absolute value ,不考虑数值的符号 ...

  6. 第三课 创建函数 - 从EXCEL读取 - 导出到EXCEL - 异常值 - Lambda函数 - 切片和骰子数据

    第 3 课   获取数据 - 我们的数据集将包含一个Excel文件,其中包含每天的客户数量.我们将学习如何对 excel 文件进​​行处理.准备数据 - 数据是有重复日期的不规则时间序列.我们将挑战数 ...

  7. JS的数据类型判断函数、数组对象结构处理、日期转换函数,浏览器类型判断函数合集

    工具地址:https://github.com/BothEyes1993/bes-jstools bes-jstools 100多个基础常用JS函数和各种数据转换处理集合大全,此工具包是在 outil ...

  8. JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

    “JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...

  9. 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 ...

随机推荐

  1. centos7 Tomcat 多项目配置

    2021-07-30 1. Tomcat 各目录功能说明 bin :脚本文件目录,存放启动和关闭 Tomcat 的脚本文件conf:存放 Tomcat 的配置文件,server.xml 尤其重要log ...

  2. 第17章-x86-64寄存器

    不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Architecture),也可以称为指令集(instruction set).Intel将x86系列CP ...

  3. Mybatis-Plus - 条件构造器 QueryWrapper 的使用

    目录 前言 查询示例 基础代码 QueryWrapper 的基本使用 QueryWrapper 的lambada写法 LambadaQueryWrapper 的使用 LambdaQueryChainW ...

  4. VueJS学习资料大全

    参考:http://www.worktle.com/articles/2467/ 文档&社区 Vue.js官方网站(中文) :http://cn.vuejs.org/ Vue论坛:http:/ ...

  5. nacos配置中心模块详解

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 配置中心 业务上的配置,功能开关,服务治理上对弱依赖的降级,甚至数据库的密码等,都可能用到动态 ...

  6. shell脚本之循环语句 for-while-until

    目录: 一.for循环语句 二.while循环语句 三.unti循环语句   一.for循环语句 读取不同的变量值,用来逐个执行同一组命令 举例 批量添加用户◆ 用户名存放在users.txt文件中, ...

  7. 自己用树莓派做了一个电视盒子,还可以看优酷和cctv

    我刚接触树莓派时间不久,安装过raspberry(树莓派官方系统),ubuntu mate,openelec等系统,openelec是一个电视盒子系统,但是我的用的电视机是一个老式的,老是出现闪屏的问 ...

  8. css3 图片变黑白 filter

    /*图片黑白*/ .img-gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: gray ...

  9. centos linux服务器apache+mysql环境访问慢优化方法

    查找软件安装目录:find / -name 软件名称 一.优化apache配置增加MaxClients的值 默认情况下,2.0及以上apache版本MaxClients的值为256,对于中大型应用访问 ...

  10. Java面向对象系列(10)- 什么是多态

    多态 即同一方法可以根据发送对象的不同而采取不同的行为方式 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多 多态存在的条件 有继承关系 子类重写父类方法 父类引用指向子类对象 注意:多态是 ...