2

sqlalchemy で Python フレームワークとしてフラスコを使用しています。モデルは、クエリの作成に役立つ query_property を使用します。

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

persons = Person.query.all()

各人には、住んでいる都市、州、国があり、すべての結果を収集して、次のような出力を行いたいと考えています。

    Country     State       City        Persons(count)
================================================================================
    US      NY      New York    10
    DE      Berlin      Berlin      100

これには明らかに、国、州、都市ごとにカウントとグループを選択する必要があります。グループ化は機能しますが、クエリプロパティに選択メソッドがないため、カウントを実装する方法がわかりません。その場合、次のように記述します。

Person.query.select([Person.country, Person.state, Person.city, func.count(Person.id)]).all()

group_by と count でquery_propertyを使用する方法を知っている人はいますか?

4

2 に答える 2

8

add_columns上のメソッドを使用して、Person.query計算値を追加できます。

Person.query.add_columns(func.count(...)).group_by(...).all()

タプルのリスト(Personオブジェクトではない)が返されることに注意してください。ただし、各タプルには、Personオブジェクトと計算値が含まれています。

[(<Person object>, 3), (<Person object>, 7), ...]
于 2012-11-08T18:31:01.483 に答える
2

query_propertyそうです-オブジェクト全体(そのすべての属性)を暗黙的に選択するため、を使用して実行することはできませんgroup_by。クエリの非集計部分に不要な列が含まれているため、を追加しても目的の結果が得られません。

ただし、単に使用できますdb_session.query([Person.country, ...]).group_by(...)。したがって、db_sessionプロパティをPersonクラスに追加しquery、それを使用して目的のクエリを明示的に作成するだけです。

class Person(object):
    session = db_session
    query = db_session.query_property()
    ....
于 2011-11-26T00:02:39.697 に答える