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

Query di ricerca basata su SQLAlchemy senza distinzione tra maiuscole e minuscole?

Questo dovrebbe essere compilato esattamente...

query( models.Object )\
.filter( 
     sqlalchemy.func.upper( models.Object.fieldname )\
     .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
  1. potresti anche passare semplicemente in maiuscolo. personalmente, farei in_( foo.uppercase() , bar.uppercase() )

  2. SqlAlchemy funziona con DBAPI per passare i parametri di binding nel tuo datastore di back-end. Traduzione:i valori vengono automaticamente sottoposti a escape.

se vuoi fare un elenco di stringhe, qualcosa del genere dovrebbe funzionare

.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )

Voglio solo aggiungere che se vuoi ottimizzare queste selezioni per la velocità e sei su Postgres o Oracle, puoi creare un 'indice di funzione'

CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))

il pianificatore di query (nel database) saprà utilizzare quel lower(fieldname) index durante la ricerca rispetto a un lower(fieldname) interrogazione.