Использование cx_Oracle с оператором IN (Python 3) - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь передать параметры в оператор 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 Ответ

0 голосов
/ 06 сентября 2018

При использовании отдельных значений или литералов в предложении 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))])
...