3

次のクエリ呼び出しがあります。

SearchList = (DBSession.query(
    func.count(ExtendedCDR.uniqueid).label("CallCount"),
    func.sum(ExtendedCDR.duration).label("TotalSeconds"),
    ExtendedCDR,ExtensionMap)
    .filter(or_(ExtensionMap.exten == ExtendedCDR.extension,ExtensionMap.prev_exten == ExtendedCDR.extension))
    .filter(between(ExtendedCDR.start,datebegin,dateend))
    .filter(ExtendedCDR.extension.in_(SelectedExtension))
    .group_by(ExtendedCDR.extension)
    .order_by(func.count(ExtendedCDR.uniqueid).desc()))
    .all()
)

.query()を呼び出す前にorder_by句を定義できるようにしたいのですが、これは可能ですか?

このstackoverflowの回答がフィルター仕様を示唆しているように試してみましたが、filter_group構文を作成する方法がわかりませんでした。

その投稿から:

filter_group = list(Column.in_('a','b'),Column.like('%a'))
query = query.filter(and_(*filter_group))
4

1 に答える 1

4

呼び出しを使用してSQLクエリを作成するDBSession.query()と、このクエリは、呼び出すまで実行されません.all()

中間結果を保存し、必要に応じてフィルターやその他の句を追加できます。

search =DBSession.query(
    func.count(ExtendedCDR.uniqueid).label("CallCount"),
    func.sum(ExtendedCDR.duration).label("TotalSeconds"),
    ExtendedCDR,ExtensionMap)
search = search.filter(or_(
    ExtensionMap.exten == ExtendedCDR.extension,
    ExtensionMap.prev_exten == ExtendedCDR.extension))
search = search.filter(between(ExtendedCDR.start, datebegin, dateend))
search = search.filter(ExtendedCDR.extension.in_(SelectedExtension))
search = search.group_by(ExtendedCDR.extension)
search = search.order_by(func.count(ExtendedCDR.uniqueid).desc())

渡す値はorder_by、事前に作成できます。

search_order = func.count(ExtendedCDR.uniqueid).desc()

その後、次のように使用されます:

search = search.order_by(search_order)

クエリが完了したら、次を呼び出して結果を取得します.all()

SearchList = search.all()
于 2013-02-28T18:09:15.650 に答える