SQL炼金术不敏感的排序顺序

时间:2013-07-10 09:35:02

标签: python sqlite sqlalchemy

嗨我试图使用sql炼金术在sqlite数据库中为特定列实现升序排序,我遇到的问题是我想要排序的列有大小写数据,因此排序顺序没有工作正常。

然后我发现了关于func.lower并尝试将其合并到查询中,但它或者错误或者只是不起作用,有人能给我一个如何使用sql炼金术做一个不区分大小写的升序排序的工作示例

下面是我到目前为止(抛出错误): -

session.query(ResultsDBHistory).order_by(func.lower(asc(history_sort_order_column))).all()

python 2.6.6 sql alchemy 0.7.10

2 个答案:

答案 0 :(得分:14)

您需要反转您的功能的顺序:

session.query(ResultsDBHistory).order_by(asc(func.lower(history_sort_order_column))).all()

如此低第一个,然后声明升序。

或者,将整理更改为NOCASE

from sqlalchemy.sql import collate

session.query(ResultsDBHistory).order_by(asc(collate(history_sort_order_column, 'NOCASE'))).all()
无论如何,这可能是一个更好的主意。

认为 ASC是必需的,只需稍微简化您的代码:

from sqlalchemy.sql import collate

session.query(ResultsDBHistory).order_by(collate(history_sort_order_column, 'NOCASE')).all()

答案 1 :(得分:0)

您是否考虑过在查询后进行排序。

res = session.query(ResultsDBHistory).all()
res.sort()  #sort as the way you like