sql >> Base de Datos >  >> RDS >> Mysql

¿Consulta de búsqueda basada en IN sensible a mayúsculas y minúsculas de SQLAlchemy?

Esto debería compilar exactamente...

query( models.Object )\
.filter( 
     sqlalchemy.func.upper( models.Object.fieldname )\
     .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
  1. también podría simplemente pasar el texto en mayúsculas. personalmente, haría in_( foo.uppercase() , bar.uppercase() )

  2. SqlAlchemy funciona con DBAPI para pasar parámetros de vinculación a su almacén de datos de back-end. Traducción:los valores se escapan automáticamente.

si desea hacer una lista de cadenas, algo como esto debería funcionar

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

Solo quiero agregar que si desea optimizar estas selecciones para la velocidad y está en Postgres u Oracle, puede crear un 'índice de funciones'

CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))

el planificador de consultas (en la base de datos) sabrá usar ese lower(fieldname) index al buscar en un lower(fieldname) consulta.