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

Database API:Sådan håndterer du multi where-tilstand i Python

Du skal bruge SQL-parametre for hver værdi.

For in sætning, det betyder, at du skal generere parametrene:

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

hvor jeg antager, at params3_value er en liste over værdier til at teste params3 mod. Hvis params3_value er 3 elementer (som ['v1', 'v2', 'v3'] ) så vil den genererede SQL se sådan ud:

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

Send derefter disse parametre til cursor.execute() ring:

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

Jeg brugte :name navngivet SQL parameter stil her, da det er hvad cx_Oracle bruger. Se dokumentationen til din databaseforbindelse for de nøjagtige understøttede parameterstile.

:named navngivet SQL parameter stil kræver, at du sender parametre ind som en ordbog, så ovenstående kode genererer de rigtige nøgler til params3_value varer.




  1. PostgreSQL - FEJL:kolonnedato kan ikke castes til typedato

  2. MySQL-forespørgsel er ikke indsat, når PHP-variabelen indeholder enkelte anførselstegn

  3. CREATE EXTENTION postgis mislykkes,

  4. Django ekstra brugerregistreringsoplysninger gemmes ikke i databasen