SQLAlchemy 按降序排列?

Posted

技术标签:

【中文标题】SQLAlchemy 按降序排列?【英文标题】:SQLAlchemy ORDER BY DESCENDING? 【发布时间】:2011-05-10 07:42:04 【问题描述】:

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

【问题讨论】:

从 sqlalchemy 导入 desc from sqlalchemy import desc 【参考方案1】:

仅供参考,您还可以将这些内容指定为列属性。例如,我可能已经这样做了:

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

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

更多信息可以参考这个SQLAlchemy 1.4 Documentation

【讨论】:

是否有这方面的 API 参考,知道还有什么可用的会很酷吗? 谢谢你。官方文档中似乎缺少它。 最佳响应(目前)。 @JohnMike docs.sqlalchemy.org/en/latest/core/… sqlalchemy orm 文档对我来说是个谜,我自己在里面找不到任何东西。谢谢@dzervas【参考方案2】:
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

Usage 来自@jpmc26

【讨论】:

文档有一个new url【参考方案3】:

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

.order_by("name desc")

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

【讨论】:

这是一个潜在的脆弱的解决方法,不需要解决方法。 如果您出于任何原因在字符串中包含排序列,这很好,不过(如 Web API 中的净化输入)。 作为后续,如果您有字符串,您也可以使用getattr(MyModelClass, column_string).desc() @JimStewart 和我最终使用的方向传递:qry.order_by(getattr(getattr(Song, sort_by), sort_dir)()) 如果您已标记输出并按计算列而不是模型列排序,您也可以使用它【参考方案4】:

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

官方文档请使用link或查看下方sn-p

sqlalchemy.sql.expression.desc(column) 产生一个降序的 ORDER BY 子句元素。

例如:

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

desc() 函数是 ColumnElement.desc() 方法可用于所有 SQL 表达式,例如:

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

Parameters column – 一个 ColumnElement(例如标量 SQL 表达式) 哪个应用 desc() 操作。

另见

asc()

nullsfirst()

nullslast()

Select.order_by()

【讨论】:

这不是***.com/a/4187279/2718295的副本【参考方案5】:

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

【讨论】:

【参考方案6】:

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

.order_by("TableName.name desc")

【讨论】:

这不需要用 text() 包裹字符串吗? 注意它会在 SQLAlchemy >1.3 中导致错误,在较低版本中会出现警告

以上是关于SQLAlchemy 按降序排列?的主要内容,如果未能解决你的问题,请参考以下文章

Vertica - 按降序排列的投影

Codeigniter 分页链接按降序/倒序排列?

如何在 Firebase 中按降序排列数据 - Python

使用 plotly-express 按值按降序排列条形图中的条形

2个类,按降序排列到ArrayList中

WP-API 获取帖子并按降序排列