sql >> Database >  >> RDS >> Mysql

SQLAlchemy hoofdletterongevoelig IN gebaseerde zoekopdracht?

Dit zou precies moeten compileren...

query( models.Object )\
.filter( 
     sqlalchemy.func.upper( models.Object.fieldname )\
     .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
  1. je kunt ook gewoon hoofdletters gebruiken. persoonlijk zou ik in_( foo.uppercase() , bar.uppercase() ) doen

  2. SqlAlchemy werkt met de DBAPI om bindparameters door te geven aan uw backend-gegevensopslag. Vertaling -- waarden worden automatisch ontsnapt.

als je een lijst met strings wilt maken, zou zoiets als dit moeten werken

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

Ik wil er alleen aan toevoegen dat als u deze selecties voor snelheid wilt optimaliseren en u op Postgres of Oracle werkt, u een 'functie-index' kunt maken

CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))

de queryplanner (in de database) weet dat lower(fieldname) index bij het zoeken op een lower(fieldname) vraag.




  1. MySQL-clienttoepassingen gebruiken

  2. Hoe doe je een update + join in PostgreSQL?

  3. Verbinding met SQL Server werkt soms

  4. MySQL-som, tellen met groeperen op en meedoen