Questo dovrebbe essere compilato esattamente...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
-
potresti anche passare semplicemente in maiuscolo. personalmente, farei
in_( foo.uppercase() , bar.uppercase() )
-
SqlAlchemy funziona con DBAPI per passare i parametri di binding nel tuo datastore di back-end. Traduzione:i valori vengono automaticamente sottoposti a escape.
se vuoi fare un elenco di stringhe, qualcosa del genere dovrebbe funzionare
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
Voglio solo aggiungere che se vuoi ottimizzare queste selezioni per la velocità e sei su Postgres o Oracle, puoi creare un 'indice di funzione'
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
il pianificatore di query (nel database) saprà utilizzare quel lower(fieldname)
index durante la ricerca rispetto a un lower(fieldname)
interrogazione.