以下类型区分大小写:
MyModel.select().order_by(MyModel.name)
<class '__main__.MyModel'> SELECT t1."id", t1."name" FROM "mymodel" AS t1 ORDER BY t1."name" []
如何添加NOCASE
以使其不区分大小写?
还是有另一种方法可以使它不区分大小写吗?
我在documentation找不到任何相关信息。
答案 0 :(得分:3)
您可以使用SQL函数(使用fn
helper)小写模型名称:
MyModel.select().order_by(fn.Lower(MyModel.name))
对于SQLite,您也应该能够使用custom collation:
@db.collation()
def collate_case_insensitive(s1, s2):
return cmp(s1.lower(), s2.lower())
SqliteExtDatabase()
subclass提供的@db.collation()
装饰器允许您注册自定义排序规则功能,然后您可以使用该功能进行排序:
MyModel.select().order_by(collate_case_insensitive.collation(MyModel.name))
当然,SQLite已经有了一个内置的NOCASE
collation,应该在这里使用它,但要使用它必须构建一个SQL()
object来包含原始SQL:
MyModel.select().order_by(Clause(MyModel.name, SQL('collate NOCASE')))
这回应了SQLAlchemy的不区分大小写的排序:SQL alchemy case insensitive sort order