Dies sollte genau kompilieren...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
-
Sie können auch einfach Großbuchstaben eingeben. persönlich würde ich
in_( foo.uppercase() , bar.uppercase() )
machen -
SqlAlchemy arbeitet mit der DBAPI zusammen, um Bindungsparameter an Ihren Back-End-Datenspeicher zu übergeben. Übersetzung – Werte werden automatisch maskiert.
Wenn Sie eine Liste von Zeichenfolgen erstellen möchten, sollte so etwas funktionieren
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
Ich möchte nur hinzufügen, dass Sie, wenn Sie diese Auswahlen für Geschwindigkeit optimieren möchten und Postgres oder Oracle verwenden, einen "Funktionsindex" erstellen können
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
der Abfrageplaner (in der Datenbank) weiß, dass er diesen lower(fieldname)
verwenden muss index bei der Suche nach einem lower(fieldname)
Abfrage.