sql >> Databáze >  >> RDS >> Mysql

SQLAlchemy ve vyhledávacím dotazu založeném na IN nerozlišuje malá a velká písmena?

Toto by se mělo zkompilovat přesně...

query( models.Object )\
.filter( 
     sqlalchemy.func.upper( models.Object.fieldname )\
     .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
  1. můžete také zadat text velkými písmeny. osobně bych udělal in_( foo.uppercase() , bar.uppercase() )

  2. SqlAlchemy spolupracuje s DBAPI na předávání parametrů vazby do vašeho backendového datového úložiště. Překlad -- hodnoty jsou automaticky zakódovány.

pokud chcete vytvořit seznam řetězců, něco takového by mělo fungovat

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

Jen chci dodat, že pokud chcete optimalizovat tyto výběry na rychlost a jste na Postgres nebo Oracle, můžete si vytvořit „index funkcí“

CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))

plánovač dotazů (v databázi) bude vědět, že má použít lower(fieldname) index při vyhledávání proti lower(fieldname) dotaz.




  1. Jak vytvořit tabulku v MySQL

  2. Porovnání období

  3. MySQL Vyberte skupinu záznamů na základě nejnovějšího časového razítka

  4. Změna primárního klíče MySQL, pokud existují omezení cizího klíče