sql >> Databasteknik >  >> RDS >> Oracle

Databas API:Hur man hanterar multi where-villkor i Python

Du måste använda SQL-parametrar för varje värde.

För in uttalande, det betyder att du måste generera parametrarna:

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

där jag antar att params3_value är en lista med värden att testa params3 mot. Om params3_value är 3 element (som ['v1', 'v2', 'v3'] ) så kommer den genererade SQL-filen att se ut så här:

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

Skicka sedan dessa paramatrar till 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})

Jag använde :name heter SQL-parameterstil här eftersom det är vad cx_Oracle använder. Se din databasanslutningsdokumentation för exakt de parameterstilar som stöds.

:named namngiven SQL-parameterstil kräver att du skickar in parametrar som en ordbok, så ovanstående kod genererar rätt nycklar för params3_value föremål.




  1. Mysql multipel rad insert-select-sats med last_insert_id()

  2. Ingen anslutning kunde göras eftersom målmaskinen aktivt vägrade det (PHP / WAMP)

  3. extern databas med Adobe CQ5?

  4. Inget liblwgeom när du använder postgresql84 och postgis på Snow Leopard med MacPorts