sql >> Base de Datos >  >> RDS >> Oracle

API de base de datos:cómo lidiar con la condición multiwhere en Python

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.