SQLAlchemy 按降序排序?

654 投票
6 回答
642544 浏览
提问于 2025-04-16 07:06

我该如何在SQLAlchemy查询中使用ORDER BY descending,像下面这样?

这个查询可以正常工作,但返回的结果是按升序排列的:

query = (model.Session.query(model.Entry)
        .join(model.ClassificationItem)
        .join(model.EnumerationValue)
        .filter_by(id=c.row.id)
        .order_by(model.Entry.amount) # This row :)
        )

如果我尝试这样:

.order_by(desc(model.Entry.amount))

那么我会得到:NameError: global name 'desc' is not defined

6 个回答

99

你还可以做另外一件事:

from sqlalchemy.sql import text
...
.order_by(text("name desc")

这样会得到:按照名字降序排列。这里的缺点是,在排序时需要明确指定列名。

1048

顺便提一下,你也可以把这些东西作为列的属性来指定。例如,我可能会这样做:

.order_by(model.Entry.amount.desc())

这样做很方便,因为可以避免使用import,而且你还可以在其他地方使用,比如在关系定义中等等。

想了解更多信息,可以参考这个SQLAlchemy 1.4 文档

451
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

这是来自 @jpmc26 的一段内容,提到了一些用法,具体可以查看这个链接:Usage

撰写回答