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. Linux系统的ssh与sshd服务

    当主机中开启openssh服务,那么就对外开放了远程连接的接口 ssh为openssh服务的客户端,sshd为openssh服务的服务端 远程管理工具ssh具有数据加密传输.网络开销小以及应用平台范围 ...

  2. cmd(命令行)超好用的技巧,很不错的打开方式

    超快速打开管理cmd widows + x 按a 直接打开文件位置,在地址栏输入cmd 地址----直接cmd打开到所在文件位置 ex:cmd D:\work cd ../../../ 返回上几层的方 ...

  3. 虚拟机使用scp传输文件提示“WARNING REMOTE HOST IDENTIFICATION HAS CHANGED”解决方式

    虚拟机使用scp传输文件提示"WARNING REMOTE HOST IDENTIFICATION HAS CHANGED"解决方式 简单的说就是虚拟机里保存的认证密钥不正确了,需 ...

  4. K8S_第一课作业_20200407

    (1)通过cgroup来限制memory ##消耗内存脚本 /tmp/xmem.sh #!/bin/bash mkdir /tmp/memory mount -t tmpfs -o size=2048 ...

  5. 作业帮-PHP技术一面整理

    项目经验介绍 RPC 调用的协议 用amf 和 base64编码 我想问的是通信协议:调用rpc接口时的过程是什么样?比如业务调用PHP接口的时候,用的是什么协议? (没理解)(https://www ...

  6. 动态规划精讲(一)A单串

    单串 单串 dp[i] 线性动态规划最简单的一类问题,输入是一个串,状态一般定义为 dp[i] := 考虑[0..i]上,原问题的解,其中 i 位置的处理,根据不同的问题,主要有两种方式: 第一种是 ...

  7. 关于buildroot移植的思考

    buildroot是一个成熟的SDK框架,基于它有了openwrt. 曾经有一个项目,需要将原有的OpenWrt SDK改造,并且将软件框架重新定义.尝试精简原来的OpenWrt,并且删除所有的软件包 ...

  8. 【PHP数据结构】交换排序:冒泡、快排

    上篇文章中我们好好地学习了一下插入类相关的两个排序,不过,和交换类的排序对比的话,它们真的只是弟弟.甚至可以说,在所有的排序算法中,最出名的两个排序都在今天要介绍的交换排序中了.不管是冒泡.还是快排, ...

  9. 深入学习Composer原理(二)

    本系列的第二篇文章,这次我们聊聊:spl_autoload_register()函数 PHP的SPL库作为扩展库,已经于5.3.0版本后默认保持开启,成为PHP的一组强大的核心扩展库.大家有时间可以多 ...

  10. java面向对象编程(上)

    java面向对象学习的三条主线 1.Java类及类的成员:属性.方法.构造器.代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.stat ...