嗨我试图使用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
答案 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