Трябва да използвате 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
елементи.