Flask模型聚合函数--CRUD-----(3)/聚合查询以及修改和删除

Flask模型聚合函数

  1. 聚合函数
    1. 基本的聚合查询

      1. 聚合函数
        form sqlalchemy import func
        func中提供了所有的聚合函数
        聚合函数:
        sun():func.cum
        count():func.count
        max()
        min()
        avg()
      2. 语法:
        db.session.query(func.聚合函数(实体类.属性),).all()
        @app.route('/08-aggr')
        def aggregat_views():
            #查询Users实体中所有人平均年龄
            result = db.session.query(func.avg(Users.age)).all()
            print(result)
            return "聚合函数查询成功"
        
    2. 分组聚合查询

       db.session.query(查询列,聚合列)
       	.filter(条件)     #分组前数据筛选 --- where
       	.group_by("分组列名")     #分组  --- group by
       	.having(条件)     #分组后筛选  --- having
      

      查询Users表中年龄大于18岁的,按照isActive分组,组内人数大于2人的组名和人数查询出来

       db.session.query(
       Users.isActive,func.count(Users.id))\
       .filter(Users.age>18)\
       .group_by("isActive")\
       .having(func.count(Users.id) >= 2)
      

      练习:
      1.查询Users实体中年龄大于18岁的人的平均年龄
      2.查询Users实体中按isActive分组后,每组的人数是多少
      3.查询Users实体中按isActive分组后,组内人数大于2人的
      4.查询Users标中年龄大于“QTX”的Users信息

      @app.route("/09-aggr-exer")
      def aggr_exer():
          # 1.查询Users实体中年龄大于18岁的人的平均年龄
          result = db.session.query(func.avg(Users.age)).filter(Users.age > 18).all()
          print(result)
          # 2.查询Users实体中按isActive分组后,每组的人数是多少
          result = db.session.query(Users.isActive, func.count(Users.id)).group_by('isActive').all()
          print(result)
          # 3.查询Users实体中按isActive分组后,组内人数大于2人的组名和人数查询出来
          result = db.session.query(Users.isActive,func.count(Users.id)
                                    ).group_by("isActive").having(func.count(Users.id)>2).all()
          print(result)
          #4.查询Users标中年龄大于“QTX”的Users信息
          result = db.session.query(Users).filter(
              Users.age > db.session.query(Users.age).filter(Users.username=="QTX")).all()
          print(result)
          return "查询成功"
      

修改和删除

@app.route("/10-update")
def update_views():
    #1.修改小红的isActivede的属性为True
    user = db.session.query(Users).filter_by(username='小红').first()
    user.isActive = True
    # 2.删除姓名为小红的数据
    user = db.session.query(Users).filter_by(id=4).first()
    db.session.delete(user)
    return "数据修改成功"

将06-users的内容添加修改和删除功能

@app.route('/11-upuser',methods=['GET','POST'])
def upuser():
    if request.method == "GET":
        # 1.接收id
        id = request.args.get('id')
        # 2.按id查询对象
        user = db.session.query(Users).filter_by(id=id).first()
        # print(user)
        # 3.将对象发送到模板
        return render_template('11-upuser.html',user=user)
    else:
        # 1.接收请求的参数
        id = request.form['id']
        # 2.查询对应的参数
        user = db.session.query(Users).filter_by(id=id).first()
        # 3.为对象赋值
        user.username = request.form['username']
        user.age = request.form['age']
        user.email = request.form['email']
        if 'isActive' in request.form:
            user.isActive = True
        else:
            user.isActive = False
        # 4.保存回数据库
        db.session.add(user)
        return redirect('/06-users')

HTML代码
11-upuser.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/11-upuser" method="post">
        <p>
            用户名:
            <input type="text" name="username" value="{{user.username}}">
        </p>
        <p>
            年龄:
            <input type="number" name="age" value="{{user.age}}">
        </p>
        <p>
            邮箱:
            <input type="email" name="email" value="{{user.email}}">
        </p>
        <p>
            激活:
            <input type="checkbox" name="isActive"
                   {% if user.isActive %}
                   checked
                    {% endif %}>
            <input type="hidden" name="id" value="{{user.id}}">
        </p>
        <p>
            <button>修改</button>
        </p>
    </form>

</body>
</html>

基于实体类的查询

  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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值