SQL对炼金术不区分大小写的排序顺序
问题描述:
嗨我试图使用sql炼金术的sqlite数据库中的特定列实现升序排序,我的问题是,我想排序的列有大写和小写数据,因此排序顺序无法正常工作。SQL对炼金术不区分大小写的排序顺序
然后我发现了func.lower,并试图将其纳入查询这一点,但它错误或只是不工作,能有人给我如何做使用SQL不区分大小写的降序排列的工作示例炼金术。
下面是我迄今(抛出错误): -
session.query(ResultsDBHistory).order_by(func.lower(asc(history_sort_order_column))).all()
蟒蛇2.6.6 SQL炼金术0.7.10
答
您需要反向你的函数排序:
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()
答
你有没有想过查询后做了排序。
res = session.query(ResultsDBHistory).all()
res.sort() #sort as the way you like
嗯,我不能得到这个工作,只要我使用整理或func.lower停止排序顺序完全默认为按ID排序。我唯一可以做到这一点的方法是将直接在数据库上有问题的列的排序规则设置为NOCASE,然后忽略尝试执行不区分大小写的查询,对于为什么这可能不起作用有任何想法? – Paul
可能需要为整理顺序创建一个索引:CREATE INDEX ResultsDBHistory ON tablename(history_sort_order_column COLLATE NOCASE)'。 –
不,索引将有助于加快速度,但排序规则仍然有效,请参阅http://www.sqlite.org/datatype3.html#collation –