Du skal bruge SQL-parametre for hver værdi.
For in
sætning, det betyder, at du skal generere parametrene:
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))])
hvor jeg antager, at params3_value
er en liste over værdier til at teste params3
mod. Hvis params3_value
er 3 elementer (som ['v1', 'v2', 'v3']
) så vil den genererede SQL se sådan ud:
select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)
Send derefter disse parametre til cursor.execute()
ring:
params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
params['params3_' + str(i)] = value
cursor.execute(sql, {params})
Jeg brugte :name
navngivet SQL parameter stil her, da det er hvad cx_Oracle
bruger. Se dokumentationen til din databaseforbindelse for de nøjagtige understøttede parameterstile.
:named
navngivet SQL parameter stil kræver, at du sender parametre ind som en ordbog, så ovenstående kode genererer de rigtige nøgler til params3_value
varer.