Musisz użyć parametrów SQL dla każdej wartości.
Dla in
oświadczenie, co oznacza, że musisz wygenerować parametry:
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))])
gdzie zakładam, że params3_value
to lista wartości do przetestowania params3
przeciwko. Jeśli params3_value
składa się z 3 elementów (takich jak ['v1', 'v2', 'v3']
) wygenerowany kod SQL będzie wyglądał następująco:
select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)
Następnie przekaż te parametry do cursor.execute()
zadzwoń:
params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
params['params3_' + str(i)] = value
cursor.execute(sql, {params})
Użyłem :name
nazwany styl parametru SQL tutaj, ponieważ to jest to, co cx_Oracle
zastosowań. Zapoznaj się z dokumentacją łącznika bazy danych, aby uzyskać informacje na temat obsługiwanych stylów parametrów.
:named
nazwany styl parametru SQL wymaga przekazania parametrów jako słownika, więc powyższy kod generuje właściwe klucze dla params3_value
przedmioty.