比如我要将我的Tags表的title,按照使用次数最多的并进行降序排列,而且获取前20条Tag 如果是sql查询的话,如果下
1
2
3
4
5
6
7
select count ( * ) as total , title
from tags
where title <> ''
group by title
order by total DESC
limit 0 , 20 ;
用sqlalchemy的使用方式如下
1
2
3
4
5
6
7
8
9
10
from sqlalchemy import func
Tag . query . with_entities (
Tag . title , func . count ( Tag . title ) . label ( 'total' )
) . filter ( Tag . title != '' ) \
. group_by ( Tag . title ) \
. order_by ( 'total DESC' ) \
. limit ( 20 ) \
. all ()
但是上面的使用方式在执行的时候会报如下错误
1
2
3
SAWarning: Can't resolve label reference ' total DESC' ; converting to text() ( this warning may be suppressed after 10 occurrences)
util.ellipses_string( element.element))
解决方案的代码如下
1
2
3
4
5
6
7
8
9
10
11
12
from sqlalchemy import func , desc
order_by_total = func . count ( Tag . title ) . label ( 'total' )
Tag . query . with_entities (
Tag . title , func . count ( Tag . title ) . label ( 'total' )
) . filter ( Tag . title != '' ) \
. group_by ( Tag . title ) \
. order_by ( desc ( order_by_total )) \
. limit ( 20 ) \
. all ()
使用方式还是挺奇怪的
Licensed under CC BY-NC-SA 4.0
最后更新于 Jul 30, 2025 10:40 +0800