Использование 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))])