返回peewee ORM中的分组项目数

时间:2017-08-18 15:49:57

标签: python mysql orm peewee

我正在尝试查询唯一字段上的列表,以及使用peewee ORM查询每个唯一字段的计数。我可以从MySQL工作台轻松获得我想要的东西,但是我似乎无法从peewee中获得类似的结果。工作的MySQL查询如下所示:

select Title, Severity, count(*) from qmodel group by Title;

我在peewee尝试了一些变化,但没有任何效果。这和我的情况差不多:

from application.database.models import qmodel as q 

_field_select_list = [
    q.Title,
    q.Severity,
    fn.COUNT(q.Title),
]

for record in q.select(*_field_select_list).group_by(q.Title):
   print record

这会返回计数,但会将返回的title字段替换为count,no title(例如{'Severity': '3', 'Title': '25'}

我也让我的字段选择看起来像这样:

_field_select_list = [
    q.Title,
    q.Severity,
    fn.COUNT(SQL('*')),
]

但这只是给了我一个分组列表,没有计数。我尝试了许多其他组合而没有运气。

2 个答案:

答案 0 :(得分:1)

你需要做这样的事情:

query = (QModel
         .select(QModel.title, QModel.severity, fn.COUNT(QModel.id).alias('ct'))
         .group_by(QModel.title, QModel.severity))
for obj in query:
    print obj.title, obj.severity, obj.ct

注意,在大多数数据库中,您需要按照您选择的非聚合列进行分组。

答案 1 :(得分:0)

您是否尝试过将COUNT函数留空?它对我的数据很好。

query = q.select(q.Title, q.Severity, fn.COUNT()).group_by(q.Title)