9

您好我正在尝试使用 sql alchemy 为 sqlite 数据库中的特定列实现升序排序,我遇到的问题是我要排序的列具有大写和小写数据,因此排序顺序无法正常工作。

然后我发现了 func.lower 并尝试将其合并到查询中,但它要么错误要么不起作用,有人可以给我一个工作示例,说明如何使用 sql alchemy 进行不区分大小写的升序排序。

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

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

python 2.6.6 sql 炼金术 0.7.10

4

2 回答 2

22

您需要反转函数的顺序:

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()
于 2013-07-10T09:50:56.580 回答
0

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

res = session.query(ResultsDBHistory).all()
res.sort()  #sort as the way you like
于 2013-07-10T09:42:38.320 回答