python - 我可以在查询调用中动态更改 order_by 属性吗?

标签 python sqlalchemy pyramid

我有以下查询调用:

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 子句,这可能吗?

我试过做 this stackoverflow answer建议过滤器规范,但我不知道如何创建 filter_group 语法。

来自那个帖子:

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

最佳答案

您使用 DBSession.query() 调用构建了一个 SQL 查询,并且此查询只有在您对其调用 .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()

关于python - 我可以在查询调用中动态更改 order_by 属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140859/

相关文章:

python - 模板更改时如何重新加载 pserve?

python - 图像的 RGB 立方体

python - 过滤一行代码并仅显示某些列

SQLALCHEMY 查询和执行之间的区别

python - 如何在 SQLAlchemy 中定义对继承列的约束?

python - Pyramid self.request.POST 为空 - 没有可用的发布数据

python - Pyramid - 如何创建避免身份验证的路由

python - 根据目标数据集查找数据集中最接近的数字

python - 为什么 Selenium 在 Chrome 和 Firefox 中可以单击单选按钮,但在 IE 9 中却失败?

python - 将一个 SQLAlchemy 模型定义为与多个其他模型之一相关联