Isso deve compilar exatamente ...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
-
você também pode simplesmente passar o texto em maiúsculas. pessoalmente, eu fariain_( foo.uppercase() , bar.uppercase() )
-
SqlAlchemy trabalha com o DBAPI para passar parâmetros de ligação para seu armazenamento de dados de back-end. Tradução -- os valores são escapados automaticamente.
se você quiser fazer uma lista de strings, algo assim deve funcionar
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
Só quero acrescentar que se você quiser otimizar esses selects para velocidade, e estiver no Postgres ou Oracle, você pode criar um 'índice de função'
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
o planejador de consulta (no banco de dados) saberá usar esse
lower(fieldname)
index ao pesquisar em um lower(fieldname)
consulta.