Puis-je créer une colonne de chaîne insensible à casse dans SQLalchemy? Je suis en train d'utiliser SQLite et theres probaby un moyen de le faire à travers DB en changeant la collation, mais je veux le garder dans SQLalchemy / Python. P>
3 Réponses :
sqlite autorise COLLATION NOCASE sur champs de texte:
SQLite version 3.6.22 sqlite> create table me (name text collate nocase); sqlite> .schema CREATE TABLE me (name text collate nocase); sqlite> insert into me values("Bob"); sqlite> insert into me values("alice"); sqlite> select * from me order by name; alice Bob
SQLalchemy ne semble pas autoriser les clauses d'assemblage à la phase de création de table (DDL) par défaut, mais j'ai finalement compris un moyen de faire fonctionner ce travail sur SQLALCHEMY 0.6+. Malheureusement, cela implique un peu de sous-classement et de décoration, mais c'est raisonnablement compact.
just_a_table = Table('table_name', metadata, Column('case_insensitive', CI_String(8, collate='NOCASE'), nullable=False))
Dans la SQLALCHEMY 0.8, ils ont ajouté le paramètre de collement à tous les types de chaîne. Le mot clé COLLER est maintenant pris en charge par plusieurs back-fins de DB, y compris MySQL, SQLite et PostgreSQL. Vous devriez être capable d'écrire quelque chose comme ceci: HTTPS : //bitbucket.org/zzezeek/sqlalchemy/issues/2276 p> p>