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 查看端口占用情况

    2021-08-02 1. 查看端口占用情况 # 查看 8088 端口占用情况 lsof -i tcp:8088 # 若提示没有 lsof 命令, yum 安装一下 yum -y install ls ...

  2. Qt5之反射机制(内省)

    Qt的元对象系统除了提供信号/槽机制的特性之外,它还提供了以下特性: QObject::metaObject() 返回关联的元对象 QMetaObject::className() 在运行时状态下返回 ...

  3. 安装或更新时,pip出错,“No module named ‘pip’”

    解决办法: 在pycharm终端(Terminal)中 首先执行 :python -m ensurepip 然后执行 :python -m pip install --upgrade pip

  4. MongoDB(4)- Collection 集合相关

    Collection MongoDB 将文档存储在集合中 集合存储在 Database 中 集合类似于关系数据库(Mysql)中的表 如果集合不存在,则 MongoDB 会在第一次存储该集合数据时创建 ...

  5. C#中的文本到语音

    本演示说明了如何使用c#.net Windows Forms应用程序中的system.speech库将文本转换为语音.Microsoft .NET框架提供System.Speech.Synthesis ...

  6. C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】

    多线程编程之锁的使用[互斥锁(lock)和读写锁(ReadWriteLock)] http://blog.csdn.net/sqqyq/article/details/18651335 多线程程序写日 ...

  7. mac下secureCRT的使用技巧

    1.设置secureCRT不掉线的方法 Options->Global Options->General->Default Session->Edit Default Sett ...

  8. liunx常见指令

    linux目录结构 bin:存储普通命令 sbin:存储超级命令 home:存储普通用户 root:存储超级用户 usr /usr/local:下存储数据或软件,通常软件都放在其中 tmp:临时目录 ...

  9. python matplotlib.pyplot 散点图详解(1)

    python matplotlib.pyplot散点图详解(1) 一.创建散点图 可以用scatter函数创建散点图 并使用show函数显示散点图 代码如下: import matplotlib.py ...

  10. Shell系列(2)- 脚本执行方式

    创建shell脚本 [root@localhost sh]# vim hello.sh  shell脚本必须用.sh,同时方便文件管理 #!/bin/bash:shell文件第一行必须是这个,声明这个 ...