Vous pouvez utiliser une fonction SQL (avec le fn
helper) en minuscules le nom du modèle:
MyModel.select().order_by(fn.Lower(MyModel.name))
Pour SQLite, vous devriez être en mesure d'utiliser un custom collation ainsi:
@db.collation()
def collate_case_insensitive(s1, s2):
return cmp(s1.lower(), s2.lower())
Le @db.collation()
décorateur fourni par le SqliteExtDatabase()
subclass vous permet d'enregistrer une fonction de classement personnalisée que vous pouvez ensuite utiliser pour trier par:
MyModel.select().order_by(collate_case_insensitive.collation(MyModel.name))
Bien sûr, SQLite a déjà intégré NOCASE
collation qui devrait être utilisé ici à la place, mais pour l'utiliser sur doit construire un SQL()
object pour inclure la SQL brute:
MyModel.select().order_by(Clause(MyModel.name, SQL('collate NOCASE')))
Cela fait écho à la façon dont le cas commande insensible fonctionne pour SQLAlchemy: SQL alchemy case insensitive sort order
Est-ce que 'MyModel.select(). order_by (fn.Lower (MyModel.name))' fonctionne? Voilà comment cela fonctionne pour SQLAlchemy. –
Pour SQLite, je vois que Peewee supporte aussi les [custom collations] (http://peewee.readthedocs.org/en/latest/peewee/playhouse.html?highlight=collate#sqlite-ext-api-notes), qui devraient être utile ici. –
@MartijnPieters: Oui, cela fonctionne, merci. – stenci