Oracle
 sql >> база данни >  >> RDS >> Oracle

API за база данни:Как да се справим с условието за много места в Python

Трябва да използвате SQL параметри за всяка стойност.

За in това означава, че трябва да генерирате параметрите:

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

където предполагам, че params3_value е списък със стойности за тестване на params3 срещу. Ако params3_value е 3 елемента (като ['v1', 'v2', 'v3'] ), тогава генерираният SQL ще изглежда така:

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

След това предайте тези параметри на cursor.execute() обаждане:

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

Използвах :name наименуван тук стил на SQL параметър, тъй като това е нещото на cx_Oracle използва. Консултирайте се с документацията на конектора на вашата база данни за точните поддържани стилове на параметри.

:named стилът на именуван SQL параметър изисква да подадете параметри като речник, така че горният код генерира правилните ключове за params3_value елементи.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свържете се с Oracle чрез SSMA

  2. Функция за извикване на VBA чрез VBA и ADO

  3. Как да форматирате числа със знак минус/плюс в Oracle

  4. ограниченията на зареждащия механизъм са нарушени при свързване на клас javax/xml/namespace/QName от webapp на Oracle 10g

  5. как да намерите индекси на таблица в oracle