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>