Jav*_* C. 3 python mysql sqlalchemy lexicographic
我有一个带有String列的表,但它仅包含整数(作为字符串)。
问题是当我想在某些查询上对这一列进行order_by时。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()
请注意,将列的类型更改为整数不是一种选择,我需要在当前条件下正确地按数字排序(按数值)。
也只是发现直接在使用SQL的数据库(此数据库是MySQL数据库)上无法正确地按此列排序,因此我发现使用CAST(未签名的string_column_holding_integers AS)可以在此工作。但是还没有找到一种直接对SQLAlchemy查询执行此操作的方法(CAST部分)。
您可以cast在SQLAlchemy中执行以下操作:
session.query(...).filter(...).order_by(cast(TableName.string_column_holding_integers, Integer))