Dette burde kompilere nøjagtigt...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
-
du kan også bare skrive med store bogstaver. personligt ville jeg gøre
in_( foo.uppercase() , bar.uppercase() )
-
SqlAlchemy arbejder sammen med DBAPI'en til at overføre bindeparametre til dit backend-datalager. Oversættelse -- værdier escapes automatisk.
hvis du vil lave en liste over strenge, burde noget som dette fungere
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
Vil bare tilføje, at hvis du vil optimere disse valg for hastighed og er på Postgres eller Oracle, kan du oprette et 'funktionsindeks'
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
forespørgselsplanlæggeren (i databasen) vil vide at bruge den lower(fieldname)
indeks, når du søger mod en lower(fieldname)
forespørgsel.