关于python:SQLAlchemy ORDER BY DESCENDING?

SQLAlchemy ORDER BY DESCENDING?

在如下的sqlAlchemy查询中,如何使用order by descending

此查询有效,但按升序返回:

1
2
3
4
5
6
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 :)
        )

如果我尝试:

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

然后我得到:NameError: global name 'desc' is not defined


正如fyi一样,您也可以将这些内容指定为列属性。例如,我可能会这样做:

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

这很方便,因为您可以在其他地方使用它,如关系定义等。

有关详细信息,请参阅


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

@jpmc26的用法


你可能会做的另一件事是:

1
.order_by("name desc")

这将导致:order by name desc。这里的缺点是order by中使用的显式列名。


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

1
2
3
4
5
6
query = (model.Session.query(model.Entry)
        .join(model.ClassificationItem)
        .join(model.EnumerationValue)
        .filter_by(id=c.row.id)
        .order_by(model.Entry.amount.desc())
        )

这将按金额降序排序或

1
2
3
4
5
6
7
8
9
10
11
12
query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    model.Entry.amount.desc()
)
)


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

1
2
3
4
5
6
7
8
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()


补充的at@radu answer和SQL中一样,如果有多个具有相同属性的表,则可以在参数中添加表名。

1
.order_by("TableName.name desc")


我们可以用多种方法来做,最简单的方法是用下面的方法-

江户十一〔一〕号