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

bin*_*hex 8 python sqlite sqlalchemy

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

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

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

session.query(ResultsDBHistory).order_by(func.lower(asc(history_sort_order_column))).all()
Run Code Online (Sandbox Code Playgroud)

python 2.6.6 sql alchemy 0.7.10

Mar*_*ers 16

您需要反转函数的顺序:

session.query(ResultsDBHistory).order_by(asc(func.lower(history_sort_order_column))).all()
Run Code Online (Sandbox Code Playgroud)

首先降低,然后声明升序.

或者,将排序规则更改为NOCASE:

from sqlalchemy.sql import collate

session.query(ResultsDBHistory).order_by(asc(collate(history_sort_order_column, 'NOCASE'))).all()
Run Code Online (Sandbox Code Playgroud)

无论如何,这可能是一个更好的主意.

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

from sqlalchemy.sql import collate

session.query(ResultsDBHistory).order_by(collate(history_sort_order_column, 'NOCASE')).all()
Run Code Online (Sandbox Code Playgroud)