Esto debería compilar exactamente...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
-
también podría simplemente pasar el texto en mayúsculas. personalmente, haría
in_( foo.uppercase() , bar.uppercase() )
-
SqlAlchemy funciona con DBAPI para pasar parámetros de vinculación a su almacén de datos de back-end. Traducción:los valores se escapan automáticamente.
si desea hacer una lista de cadenas, algo como esto debería funcionar
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
Solo quiero agregar que si desea optimizar estas selecciones para la velocidad y está en Postgres u Oracle, puede crear un 'índice de funciones'
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
el planificador de consultas (en la base de datos) sabrá usar ese lower(fieldname)
index al buscar en un lower(fieldname)
consulta.