Переменные в 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. Не безопасно.

→ Ссылка