Você precisa usar parâmetros SQL para cada valor.
Para o
in
declaração, isso significa que você precisa gerar os 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))])
onde suponho que
params3_value
é uma lista de valores para testar params3
contra. Se params3_value
é 3 elementos (como ['v1', 'v2', 'v3']
) então o SQL gerado ficará assim:select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)
Em seguida, passe esses parâmetros para o
cursor.execute()
ligar:params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
params['params3_' + str(i)] = value
cursor.execute(sql, {params})
Eu usei o
:name
chamado estilo de parâmetro SQL aqui, pois é isso que o cx_Oracle
usa. Consulte a documentação do conector de banco de dados para obter os estilos de parâmetro com suporte exatos. O
:named
O estilo de parâmetro SQL nomeado requer que você passe parâmetros como um dicionário, então o código acima gera as chaves corretas para o params3_value
Itens.