ste*_*nci 2 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" []
Run Code Online (Sandbox Code Playgroud)
如何添加 aNOCASE使其不区分大小写?
或者有没有其他方法可以让它不区分大小写?
您可以使用 SQL 函数(带有fnhelper)来小写模型名称:
MyModel.select().order_by(fn.Lower(MyModel.name))
Run Code Online (Sandbox Code Playgroud)
对于 SQLite,您也应该能够使用自定义排序规则:
@db.collation()
def collate_case_insensitive(s1, s2):
return cmp(s1.lower(), s2.lower())
Run Code Online (Sandbox Code Playgroud)
子类@db.collation()提供的装饰器允许您注册自定义排序规则函数,然后您可以使用该函数进行排序:SqliteExtDatabase()
MyModel.select().order_by(collate_case_insensitive.collation(MyModel.name))
Run Code Online (Sandbox Code Playgroud)
当然,SQLite 已经有一个内置的NOCASE排序规则,应该在这里使用,但是要使用它必须构建一个SQL()对象来包含原始 SQL:
MyModel.select().order_by(Clause(MyModel.name, SQL('collate NOCASE')))
Run Code Online (Sandbox Code Playgroud)
这与 SQLAlchemy 不区分大小写排序的工作原理相呼应:SQL alchemy case insensitive sort order
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |