SQLAlchemy ORDER BY DESCENDING?

AP2*_*257 383 python sqlalchemy

如何descending在SQLAlchemy查询中使用ORDER BY ,如下所示?

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

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 :)
        )
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

.order_by(desc(model.Entry.amount))
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ick 630

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

.order_by(model.Entry.amount.desc())
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅此内容

  • 它也避免了"导入". (27认同)
  • sqlalchemy orm 文档对我来说是个谜,我自己永远无法在其中找到任何内容。谢谢@dzervas (22认同)
  • @JohnMike http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.ColumnElement.desc (3认同)
  • 是否有一个 API 参考,知道还有什么可用的会很酷? (2认同)
  • 最好的回应(目前)。 (2认同)

AP2*_*257 324

from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))
Run Code Online (Sandbox Code Playgroud)

来自@ jpmc26的用法

  • 用法:`someselect.order_by(desc(table1.mycol))`(摘自[文档](http://docs.sqlalchemy.org/en/rel_0_7/core/expression_api.html#sqlalchemy.sql.expression.desc ).)...因为我在你的问题中没有注意到它. (15认同)
  • 文档有一个 [新网址](https://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.desc) (2认同)

小智 72

你可能做的另一件事是:

.order_by("name desc")
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个可能很脆弱的解决方法,不需要解决方法. (23认同)
  • 作为后续,如果你有一个字符串,你也可以做`getattr(MyModelClass,column_string).desc()`. (18认同)
  • 如果你出于任何原因在字符串中有sort列,这很好(比如Web API中的清理输入). (12认同)
  • @JimStewart,为了方向,我最终使用:`qry.order_by(getattr(getattr(Song,sort_by),sort_dir)())` (9认同)

ana*_*thi 22

您可以.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())
        )
Run Code Online (Sandbox Code Playgroud)

这将按降序或按数量排序

query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    model.Entry.amount.desc()
)
)
Run Code Online (Sandbox Code Playgroud)

  • 这怎么不是/sf/answers/293109561/的副本 (5认同)

Art*_*nov 12

你可以试试: .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()
Run Code Online (Sandbox Code Playgroud)