python - 具有 int 值的 SQLAlchemy order_by 字符串列

标签 python mysql sqlalchemy lexicographic

我有一个带有 String 列的表,但它只包含整数(作为字符串)。

当我想在某些查询上按此列排序时,问题就出现了。 SQLAlchemy(或者更具体地说是 python)对字符串使用字典顺序,所以

>>> '100000' < '99999'
True

即使当
>>> 100000 < 99999
False

如何通过此字符串列的数值实现 order_by?

我目前有一个这样的查询:
session.query(TableName).filter(TableName.column == 'some_value').order_by(TableName.string_column_holding_integers).all()

请注意,将列的类型更改为整数不是一个选项,我需要在当前条件下正确(按数值)order_by。

也刚刚发现直接在使用 SQL 的数据库上(这是一个 MySQL 数据库)我无法正确地按此列排序,所以我发现使用 CAST(string_column_holding_integers AS unsigned) 在这里工作。但是还没有找到直接在 SQLAlchemy 查询上执行此操作(CAST 部分)的方法。

最佳答案

你可以做一个 cast 在 SQLAlchemy 中是这样的:

session.query(...).filter(...).order_by(cast(TableName.string_column_holding_integers, Integer))

关于python - 具有 int 值的 SQLAlchemy order_by 字符串列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36416080/

相关文章:

python - 用 `try except` 尝试两个表达式

postgresql - 在 SQLAlchemy 中打印计算出的距离

python - 如何在迭代时从 json 中删除项目?

python - numpy 数组到置换矩阵

mysql - 如何从两列上具有唯一性的表中获取记录 - rails

mysql - 从同一个表的两行中选择数据

python - 使用 SQL Alchemy 查询 Kerberized Hive

python - django 中硬编码 urlpatterns 的替代方案

python - python代码执行出错-字典问题

C# - 在 VS2017 中创建新连接时如何修复错误 "missing server and user in credentials"