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.