sql >> Database teknologi >  >> RDS >> Mysql

SQLAlchemy ufølsom IN-baseret søgeforespørgsel?

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()
  1. du kan også bare skrive med store bogstaver. personligt ville jeg gøre in_( foo.uppercase() , bar.uppercase() )

  2. 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.




  1. Sådan opretter du et indeks i Django uden nedetid

  2. Hvordan kan jeg få forfædre-id'er til vilkårlig rekursionsdybde i én SQL-forespørgsel?

  3. Ny måde at kopiere filer i SQL Server 2019

  4. Hvordan formaterer jeg mine orakelforespørgsler, så kolonnerne ikke ombrydes?