Использование cx_Oracle с оператором IN (Python 3)

Я пытаюсь передать параметры в оператор SQL "IN" с помощью cx_Oracle. Это дает правильный результат:

sql = """select * from
           (select level numb from dual connect by level <= 4)
         where numb = :var"""

print([row[0] for row in cur.execute(sql, (1,))])
Output: [1]

Однако я не смог понять, как использовать оператор "IN".

sql = """select * from
           (select level numb from dual connect by level <= 4)
         where numb in :var"""

print([row[0] for row in cur.execute(sql, (1, 2))])
Output: cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

Я пробовал варианты оператора IN, а также с использованием словаря для передачи параметров.

1 ответ

Решение

При использовании отдельных значений или литералов IN предложение в SQL требует значения, заключенные в скобки. А так как вы передаете два параметра, включите два заполнителя в паранетезы.

sql = """select * from
           (select level numb from dual connect by level <= 4)
         where numb in (:1, :2)"""

print([row[0] for row in cur.execute(sql, (1, 2))])
Другие вопросы по тегам