sql炼金顺序下降?

我如何使用ORDER BY descending在SQLAlchemy查询如下?

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

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

535062 次浏览
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

使用 from @jpmc26

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

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

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

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

你可以做的另一件事是:

.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())
)

这将按数量降序排序 或者< / p >

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)生成降序BY < / p >子元素。

例如:

from sqlalchemy import desc


stmt = select([users_table]).order_by(desc(users_table.c.name))

将生成如下SQL:

SELECT id, name FROM user ORDER BY name DESC
函数的独立版本 ColumnElement.desc()方法可用于所有SQL表达式,例如:

stmt = select([users_table]).order_by(users_table.c.name.desc())

参数列-一个ColumnElement(例如标量SQL表达式) 应用desc()操作。

另请参阅

asc ()

nullsfirst ()

nullslast ()

Select.order_by ()

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

.order_by("TableName.name desc")

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