SQLAlchemy ORDER BY DESCENDING?

时间:2010-11-15 15:47:42

标签: python sqlalchemy

如何在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

7 个答案:

答案 0 :(得分:574)

就像FYI一样,您也可以将这些内容指定为列属性。例如,我可能已经做过:

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

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

有关详细信息,您可以refer this

答案 1 :(得分:302)

from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))
来自@ jpmc26的

Usage

答案 2 :(得分:69)

你可能做的另一件事是:

.order_by("name desc")

这将导致:ORDER BY name desc。这里的缺点是按顺序使用显式列名。

答案 3 :(得分:17)

您可以在查询中使用.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()
)
)

答案 4 :(得分:2)

您可以尝试: .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()

答案 5 :(得分:1)

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

.order_by("TableName.name desc")

答案 6 :(得分:-3)

我们可以通过多种方式做到这一点。最简单的方法是通过以下方式做到这一点-

res=ModelName.query.filter(ModelName.var1==cond).order_by(ModelName.var1.desc())