sql >> Database >  >> RDS >> Oracle

Database-API:hoe om te gaan met multi-waar-voorwaarde in Python

U moet voor elke waarde SQL-parameters gebruiken.

Voor de in statement, dat betekent dat u de volgende parameters moet genereren:

sql = 'select * from tbl where params1=:params1 and params2=:params2 and params3 in ({})'.format(
    ', '.join(['params3_' + str(i) for i in range(len(params3_value))])

waarbij ik aanneem dat params3_value is een lijst met waarden om te testen params3 tegen. Als params3_value is 3 elementen (zoals ['v1', 'v2', 'v3'] ) dan ziet de gegenereerde SQL er als volgt uit:

select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)

Geef die parameters dan door aan de cursor.execute() bel:

params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
    params['params3_' + str(i)] = value
cursor.execute(sql, {params})

Ik gebruikte de :name hier de SQL-parameterstijl genoemd, want dat is wat de cx_Oracle toepassingen. Raadpleeg de documentatie van uw databaseconnector voor de exacte ondersteunde parameterstijlen.

De :named benoemde SQL-parameterstijl vereist dat u parameters doorgeeft als een woordenboek, dus de bovenstaande code genereert de juiste sleutels voor de params3_value artikelen.




  1. Hoe element-ID in PHP-variabele te krijgen

  2. Oracle SQL - maak een string door rijen samen te voegen, maar het aantal tekens mag niet groter zijn dan X

  3. Groeperen op kolom met afhankelijkheid van een andere kolom

  4. Maakt de index op Varchar prestatieverschil?