我正在使用 Python 和 SQLAlchemy 构建一个 Web 应用程序。
我使用以下代码来检索记录。
yardDB.query.order_by(yardDB.PIT.asc())
它根据我的“PIT”列中的升序返回记录,但它没有按照我需要的方式返回记录。 (下图中绿色高亮部分)
*注意,Seq 列与绿色列不同。绿色列也被隐藏,但我取消隐藏它以查看它如何返回记录。
我需要它简单地返回行,例如 1, 2, 3, .... 10, 11, ... 20, 21, ...
编辑:列出我尝试过但没有成功的事情。
yardDB.query.order_by(yardDB.PIT)
这可能会迟到,但我刚刚为自己解决了同样的问题。其他评论也建议我对字符串列进行排序,但我是对 id 进行排序,这绝对不是字符串列。
还可以通过在控制台中输入“User.id.type”进行确认,该控制台返回“Integer()”
SQLAlchemy 通过其文档的默认排序是:
q = session.query(Entity).order_by(Entity.id)
我们需要做的是将响应转换为十进制
import sqlalchemy as sqla
formated_column = sqla.cast(sqla.func.substring(Entity.id, "([0-9]+)"), sqla.DECIMAL)
q = session.query(Entity).order_by(formated_column)
现在返回排序结果
附注如果您担心 CAST 函数的性能,它应该优于任何其他服务器函数