Python

flask_sqlalchemy使用的方式

文 / 大炳哥 来源 / 原创 阅读 / 2308 3年前

最近工作中,有同学在问sqlalchemy的使用。当我和他详细了解后,发现属于Sqlalchemy的高阶使用,所以整理了这篇文章,以记录SqlAlchemy的部分高阶用法,本篇讲到的主要是搜索查询。

1. 首先先看下,要实现的sql语句

sql = "select count(*) as num, address from soufang where address like '%{}%' group by address order by num DESC limit 9".format(kw)
  • 根据查询信息kw在address字段中,进行过滤查询
  • 对上面的结果,根据address字段信息进行分组
  • 对上面的结果,根据每组的信息的数量进行排序(倒序排序)
  • 对上面的结果,使用limit对获取的结果进行限制,只获取9个

2. 使用sqlalchemy的话,如下操作

分步实现:

1.先实现简单查询

select * from soufang
SouFang.query

2.修改为获取 count() 获取数量 ,获取address字段

select count(*) as num, address from soufang
from sqlalchemy import func
kw = ''
Soufang.query.with_entities(func.count(), SouFang.address)

3. 添加 根据kw进行过滤

select count(*) as num, address from soufang where address like '%{}%'.format(kw)
from sqlalchemy import func
kw = ''
Soufang.query.with_entities(func.count(), SouFang.address).filter(SouFang.address.contains(kw))

4. 添加 根据address进行分组

select  count(*) as num, address from soufang where address like '%{}%' group by address
from sqlalchemy import func
kw = ''
Soufang.query.with_entities(func.count(), SouFang.address).filter(SouFang.address.contains(kw)).group_by(Soufang.address)

5. 添加 根据数量进行排序,倒序

select count(*) as num, address from soufang where address like '%{}%' group by address order by num DESC
from sqlalchemy import func
kw = ''
SouFang.query.with_entities(func.count(), SouFang.address).filter(SouFang.address.contains(kw)).group_by(Soufang.address).order_by(desc('num'))

6. 添加 限制获取数量 limit()

select count(*) as num, address from soufang where address like '%{}%' group by address order by num DESC limit 9
from sqlalchemy import func
kw = ''
SouFang.query.with_entities(func.count(), SouFang.address).filter(SouFang.address.contains(kw)).group_by(Soufang.address).order_by(desc('num')).limit(9)

5

评论

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

站点声明:本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

© 2019 The Pride & Joy of an Artisan. · Designed By duoguyu · Powered By Django京ICP备19006898号-1
相关侵权、举报、投诉及建议等,请发E-mail:lemont0086@163.com

友情链接: 大炳哥的博客 逐梦个人博客 微微的博客 daixu 十年之约