Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

API de banco de dados:como lidar com a condição multi where em Python


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.