Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Database API:jak radzić sobie z wieloma warunkami w Pythonie

Musisz użyć parametrów SQL dla każdej wartości.

Dla in oświadczenie, co oznacza, że ​​musisz wygenerować 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))])

gdzie zakładam, że params3_value to lista wartości do przetestowania params3 przeciwko. Jeśli params3_value składa się z 3 elementów (takich jak ['v1', 'v2', 'v3'] ) wygenerowany kod SQL będzie wyglądał następująco:

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

Następnie przekaż te parametry do cursor.execute() zadzwoń:

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

Użyłem :name nazwany styl parametru SQL tutaj, ponieważ to jest to, co cx_Oracle zastosowań. Zapoznaj się z dokumentacją łącznika bazy danych, aby uzyskać informacje na temat obsługiwanych stylów parametrów.

:named nazwany styl parametru SQL wymaga przekazania parametrów jako słownika, więc powyższy kod generuje właściwe klucze dla params3_value przedmioty.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tomcat 6/7 JNDI z wieloma źródłami danych

  2. Jak wywołać supermetodę obiektu Oracle PL/SQL?

  3. wdrożyć aplikację z dostawcą OraOLEDB

  4. Czy istnieje pragma PL/SQL podobna do DETERMINISTIC, ale dla zakresu pojedynczego SQL SELECT?

  5. Pobieranie ORA-02391:SESSIONS_PER_USER limit