sql >> Databáze >  >> RDS >> Oracle

Databázové API:Jak se vypořádat s podmínkou multi where v Pythonu

Pro každou hodnotu musíte použít parametry SQL.

Pro in to znamená, že musíte vygenerovat parametry:

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

kde předpokládám, že params3_value je seznam hodnot k testování params3 proti. Pokud params3_value je 3 prvky (jako ['v1', 'v2', 'v3'] ), vygenerované SQL bude vypadat takto:

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

Poté předejte tyto parametry do cursor.execute() zavolejte:

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

Použil jsem :name zde pojmenoval styl parametru SQL, protože to je to, co cx_Oracle používá. Přesné podporované styly parametrů naleznete v dokumentaci ke konektoru databáze.

:named pojmenovaný styl parametru SQL vyžaduje, abyste předali parametry jako slovník, takže výše uvedený kód generuje správné klíče pro params3_value položky.




  1. SQL:Výjimka z jinak seřazené sady výsledků

  2. Funkce SYS_EXTRACT_UTC() v Oracle

  3. Celý proces obnovení databáze SQL Server z příkazového řádku

  4. MySQL:Jak vypočítat týdny od určitého data?