sqlalchemy group_by和count

Rom*_* M. 2 sqlalchemy flask-sqlalchemy

我正在使用flask作为带有sqlalchemy的python框架.模型使用query_property来帮助我构建查询:

class Person(object):
        query = db_session.query_property()
        ....

persons = Person.query.all()
Run Code Online (Sandbox Code Playgroud)

每个人都有他居住的城市,州和国家,我想收集所有结果并输出如下内容:

    Country     State       City        Persons(count)
================================================================================
    US      NY      New York    10
    DE      Berlin      Berlin      100
Run Code Online (Sandbox Code Playgroud)

这显然需要按国家,州,城市选择计数和分组.group by thing有效但我不知道如何实现计数,因为查询属性没有select方法,在这种情况下我会写:

Person.query.select([Person.country, Person.state, Person.city, func.count(Person.id)]).all()
Run Code Online (Sandbox Code Playgroud)

谁知道如何使用query_property与group_by和count?

小智 7

您可以使用该add_columns方法Person.query附加计算值:

Person.query.add_columns(func.count(...)).group_by(...).all()
Run Code Online (Sandbox Code Playgroud)

请记住,您将返回元组列表(而不是Person对象).但是,每个元组都包含Person对象和计算值:

[(<Person object>, 3), (<Person object>, 7), ...]
Run Code Online (Sandbox Code Playgroud)