与peewee不区分大小写

时间:2014-05-20 14:11:49

标签: python sqlite peewee

以下类型区分大小写:

MyModel.select().order_by(MyModel.name)
<class '__main__.MyModel'> SELECT t1."id", t1."name" FROM "mymodel" AS t1 ORDER BY t1."name" []

如何添加NOCASE以使其不区分大小写?

还是有另一种方法可以使它不区分大小写吗?

我在documentation找不到任何相关信息。

1 个答案:

答案 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