To powinno się dokładnie skompilować...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
-
możesz też po prostu podać tekst pisany wielkimi literami. osobiście zrobiłbym
in_( foo.uppercase() , bar.uppercase() )
-
SqlAlchemy współpracuje z DBAPI, aby przekazać parametry wiązania do magazynu danych zaplecza. Tłumaczenie — wartości są automatycznie escapowane.
jeśli chcesz zrobić listę ciągów , coś takiego powinno działać
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
Chcę tylko dodać, że jeśli chcesz zoptymalizować te wybory pod kątem szybkości i jesteś w Postgres lub Oracle, możesz utworzyć „indeks funkcji”
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
planista zapytań (w bazie danych) będzie wiedział, jak użyć tego lower(fieldname)
indeks podczas wyszukiwania według lower(fieldname)
zapytanie.