如何在SQLAlchemy查询中使用ORDER降序,如下所示?

这个查询是有效的,但是以升序返回它们:

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:全局名称'desc'没有定义。


当前回答

仅供参考,您还可以将这些东西指定为列属性。例如,我可能做过:

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

这很方便,因为它避免了导入,并且您可以在其他地方使用它,例如在关系定义中等等。

有关更多信息,您可以参考SQLAlchemy 1.4文档

其他回答

与SQL中一样,如果您有许多具有相同属性的表,则可以在参数中添加表名。

.order_by("TableName.name desc")
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

@jpmc26的用法

你可以做的另一件事是:

.order_by("name desc")

这将导致:ORDER BY name desc。这里的缺点是在ORDER BY中使用了显式列名。

您可以像这样在查询中使用.desc()函数

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

这将按数量降序排序 或

query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    model.Entry.amount.desc()
)
)

使用SQLAlchemy的desc函数

from sqlalchemy import desc
query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    desc(model.Entry.amount)
)
)

对于正式文档,请使用链接或检查下面的代码片段

sqlalchemy.sql.expression.desc(column) Produce a descending ORDER BY clause element. e.g.: from sqlalchemy import desc stmt = select([users_table]).order_by(desc(users_table.c.name)) will produce SQL as: SELECT id, name FROM user ORDER BY name DESC The desc() function is a standalone version of the ColumnElement.desc() method available on all SQL expressions, e.g.: stmt = select([users_table]).order_by(users_table.c.name.desc()) Parameters column – A ColumnElement (e.g. scalar SQL expression) with which to apply the desc() operation. See also asc() nullsfirst() nullslast() Select.order_by()

仅供参考,您还可以将这些东西指定为列属性。例如,我可能做过:

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

这很方便,因为它避免了导入,并且您可以在其他地方使用它,例如在关系定义中等等。

有关更多信息,您可以参考SQLAlchemy 1.4文档