Oracle
 sql >> Database >  >> RDS >> Oracle

API del database:come gestire la condizione multi where in Python

Devi usare i parametri SQL per ogni valore.

Per il in istruzione, ciò significa che devi generare i parametri:

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))])

dove presumo che params3_value è un elenco di valori da testare params3 contro. Se params3_value è di 3 elementi (come ['v1', 'v2', 'v3'] ) quindi l'SQL generato sarà simile a:

select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)

Quindi passa quei parametri a cursor.execute() chiama:

params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
    params['params3_' + str(i)] = value
cursor.execute(sql, {params})

Ho usato il :name chiamato stile parametro SQL qui in quanto questo è ciò che il cx_Oracle usi. Consulta la documentazione del connettore del database per gli stili di parametro supportati esatti.

Il :named lo stile del parametro SQL denominato richiede che tu passi i parametri come un dizionario, quindi il codice sopra genera le chiavi giuste per il params3_value articoli.