Переменные в cursor.execute
Хочу запускать sql-запрос питоновским файлом, подставля в запрос объявленную в коде пайтона переменную. Если записать sql-запрос в самом файле пайтона, все ок, но если запрос вынести в отдельный файл, моя переменная в запрос не попадает.
Вот так работает:
kod = '5, 7'
...
cursor.execute(f"""SELECT docname from TABLE_1
where kod in ({kod})""")
Но если вынести этот запрос в отдельный файл 1.sql:
kod = '5, 7'
with open('1.sql', 'r') as sql:
query = sql.readlines()
query = " ".join(query)
...
cursor.execute(f"""query""")
...выдает ошибку "cx_Oracle.DatabaseError: ORA-00900: invalid SQL statement"
Подскажите, плиз, в чем может быть причина?
Ответы (1 шт):
Автор решения: Namerek
→ Ссылка
В вашем sql файле запрос должен выглядеть примерно так:
SELECT docname from TABLE_1
where kod in (%s);
Вызов в коде python так:
items = [5, 7]
with open('1.sql', 'r') as sql:
query = sql.read()
cursor.execute(query, [items])
Вообще ни разу не лучшая практика использовать
fстроки для форматирования запросов:
1. Не удобно.
2. Не безопасно.