如何在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'没有定义。


当前回答

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

@jpmc26的用法

其他回答

您可以像这样在查询中使用.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("name desc")

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

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

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

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

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

您可以尝试:.order_by(ClientTotal.id.desc())

session = Session()
auth_client_name = 'client3' 
result_by_auth_client = session.query(ClientTotal).filter(ClientTotal.client ==
auth_client_name).order_by(ClientTotal.id.desc()).all()

for rbac in result_by_auth_client:
    print(rbac.id) 
session.close()
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

@jpmc26的用法