Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQLAlchemy case insensitive IN-basierte Suchabfrage?

Dies sollte genau kompilieren...

query( models.Object )\
.filter( 
     sqlalchemy.func.upper( models.Object.fieldname )\
     .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
  1. Sie können auch einfach Großbuchstaben eingeben. persönlich würde ich in_( foo.uppercase() , bar.uppercase() ) machen

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