Как добавить переменную в запрос?
Есть запрос, нужно добавить переменную:
var1 = 'Тест'
query = "SELECT * from table where value = %s)"
args = (var1)
cur.execute(query, args)
rows = cur.fetchall()
Выводит ошибку:
cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Перечислю ошибки:
- лишняя / непарная закрывающая скобка в конце SQL строки
- по-моему,
cx_Oracleне поддерживает%sшаблона args = (var1)- является строкой, а не кортежем. Для того чтобы получился кортеж надо делать так:args = (var1,). NOTE: обратите внимание на запятую.
Попробуйте так:
var1 = 'Тест'
query = "SELECT * from table where value = :val"
args = (var1, ) # или: [var1], т.е. передавать надо либо список либо кортеж
cur.execute(query, args)
SQL and PL/SQL statements that pass data to and from Oracle Database should use placeholders in SQL and PL/SQL statements that mark where data is supplied or returned. These placeholders are referred to as
bind variablesorbind parameters.
A
bind variableis a colon-prefixed identifier or numeral.
Т.е. либо так:
select * from table where col1_name = :col1 and col2_name = :col2
либо так:
select * from table where col1_name = :1 and col2_name = :2