我在peewee文档how to create custom collations中找到了,但我无法找到如何使用the built-in sqlite collating sequences。
何我在peewee中创建以下查询(它是上面提到的sqlite文档页面中的最后一个)?
SELECT x FROM t1 ORDER BY c COLLATE NOCASE, x;
如何指定索引的排序规则?
CREATE INDEX i1 ON t1(f1 COLLATE NOCASE);
修改
coleifer的回答解决了有关查询的问题。
对于索引创建,我使用以下技巧,当你在启动时只创建一次索引时就好了(就像在我的应用程序中一样)。
表LockedFiles
上两列的不区分大小写的唯一索引可以防止重复的条目。
class LockedFiles(PeeweeModel):
folder = peewee.CharField(index=True)
file = peewee.CharField(index=True)
@classmethod
def custom_init(cls):
db.execute_sql('create unique index if not exists lockedfiles_unique '
'on lockedfiles(folder collate nocase, file collate nocase)', {})
def create_tables(drop_existing_tables):
for table in [LockedFiles, Model2, Model3]:
if drop_existing_tables:
table.drop_table(True)
table.create_table(True)
try:
table.custom_init()
except:
pass
create_tables(drop_existing_tables=False)
答案 0 :(得分:1)
您可以通过构建SQL子句并将其传递给order_by()
来指定排序规则。
例如:
collated = Clause(MyModel.field, SQL('COLLATE NOCASE'))
MyModel.select().order_by(collated, MyModel.other_field)
对于索引,遗憾的是,您需要手动创建,因为peewee不知道如何将归类信息添加到CREATE INDEX SQL中。如果您想打开拉取请求,我肯定会考虑合并该功能。