Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Datenbank-API:Umgang mit Multi-Where-Bedingungen in Python

Sie müssen für jeden Wert SQL-Parameter verwenden.

Für den in -Anweisung, das heißt, Sie müssen die Parameter generieren:

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))])

wobei ich diesen params3_value annehme ist eine Liste von Werten zum Testen von params3 gegen. Wenn params3_value besteht aus 3 Elementen (wie ['v1', 'v2', 'v3'] ) dann sieht das generierte SQL so aus:

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

Übergeben Sie diese Parameter dann an cursor.execute() Aufruf:

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

Ich habe den :name verwendet Benannter SQL-Parameterstil hier, da das cx_Oracle ist Verwendet. Konsultieren Sie die Dokumentation Ihres Datenbank-Connectors für die genauen unterstützten Parameterstile.

Der :named Der benannte SQL-Parameterstil erfordert, dass Sie Parameter als Wörterbuch übergeben, sodass der obige Code die richtigen Schlüssel für den params3_value generiert Artikel.