Flask 查询,分页,排序及逻辑运算与聚合:

1.1 all(), first(), get()的使用

# all():用户查询所有数据
User.query.all()

# first(): 用户查询第一条数据
User.query.first() 

# get(): 需要传递, 查询主键与参数相同的数据
User.query.get(1)

 1.2filter(), filter_by实现过滤操作

条件查询提供了filter()与filter_by来实现, filter_by可以看做是filter的简写方式.
# 1.实现如下:
    # (1).filter()实现的条件查询
    User.query.filter(User.username=='name').first()
    # (2).filter_by()实现的条件查询
    User.query.filter_by(username="name").first()

 1.3 分页与排序

# 1.限制查询(分页)
User.query.filter(age=18).offset(2).limit(3).all()  # 跳过二条开始查询,限制输出3条
注意: offset与limit先后顺序调换, 不影响查询结果

# 2.排序
    # (1).按照年龄升序排序, 默认升序, 可以省略".asc()"
    User.query.order_by(User.age.asc()).all()
    # (2).按照年龄降序排序
	User.query.order_by(User.age.desc()).all() 

 1.4 逻辑运算与聚合

# 1.逻辑运算
from sqlalchemy import or_, and_, not_
# (1).or_: 或, 查询名字为jeremy或年龄为19的
User.query.filter(or_(User.username =='jeremy',User.age==18)).all()
# (2).and_: 与, 查询名字为j2或年龄为19
User.query.filter(and_(User.name=="j2", User.age==19)).all()
# (3).not_: 非, 查询年龄不是18岁的
User.query.filter(not_(User.age==18)).all()

# 2.比较查询
User.query.filter(User.id.__lt__(5)).all() # 小于5
User.query.filter(User.id.__le__(5)).all() # 小于等于5
User.query.filter(User.id.__gt__(5)).all() # 大于5
User.query.filter(User.id.__ge__(5)).all() # 大于等于5

# 3.in查询 TODO in 操作
User.query.filter(User.username.in_(('A','B','C','D'))).all()

# 4.聚合查询
from sqlalchemy import func
class Index(Resource):
    def get(self):
        ret1 = db.session.query(func.count(Stu.age)).all()
        ret2 = db.session.query(func.sum(Stu.age)).all()
        ret3 = db.session.query(func.avg(Stu.age)).all()
        print('统计数量: ', ret1[0][0])
        print('年龄总和:', ret2[0][0])
        print('年龄平均值:', ret3[0][0])
        return json.dumps({'msg': 'ok'})

随机展示数据库5条数据

top_all = TopicModel.query.order_by(func.rand()).limit(5)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值