Debe usar parámetros SQL para cada valor.
Para el in
declaración, eso significa que necesita generar los parámetros:
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))])
donde asumo que params3_value
es una lista de valores para probar params3
contra. Si params3_value
son 3 elementos (como ['v1', 'v2', 'v3']
) entonces el SQL generado se verá así:
select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)
Luego pase esos parámetros al cursor.execute()
llamar:
params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
params['params3_' + str(i)] = value
cursor.execute(sql, {params})
Usé el :name
nombre de estilo de parámetro SQL aquí ya que eso es lo que cx_Oracle
usos. Consulte la documentación del conector de su base de datos para conocer exactamente los estilos de parámetros admitidos.
El :named
El estilo de parámetro SQL con nombre requiere que pase los parámetros como un diccionario, por lo que el código anterior genera las claves correctas para el params3_value
artículos.