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.