python SQLAlchemy中子查询subquery的使用
基本配置:
https://www.cnblogs.com/whycai/p/11963443.html
原始sql:
将表中数据按照name分组,其他字段展示最新的数据,于是,先要排序后,再进行分组
select a.name,count(*),a.datetime from (select * from TableName where 1=1 and datetime >= "2020-1-9 11:00:00" and datetime <= "2020-1-9 20:00:00" ORDER BY id DESC LIMIT 100000) a GROUP BY a.name ;
将sql拆解:
1. select * from TableName where 1=1 and datetime >= "2020-1-9 11:00:00" and datetime <= "2020-1-9 20:00:00" ORDER BY id DESC LIMIT 100000 2. select a.name,count(*),a.datetime from (1中sql) a GROUP BY a.name ;
SQLAlchemy的写法:
sql_text = ‘ 1=1 and datetime >= "2020-1-9 11:00:00" and datetime <= "2020-1-9 20:00:00"‘ #相当于 sql拆解中的1 resSub = db.session.query(TableName).filter(text(sql_text)).order_by(TableName.id.desc()).limit(10000).subquery() #相当于 sql拆解中的2 res = db.session.query(resSub.c.name, func.count(resSub.c.name), resSub.c.datetime).group_by(resSub.c.name).all()