команда pyodbc выполнить не принимается ? параметры правильно?

#parameters #pyodbc

Вопрос:

Этот код:

 cursor.execute('select RLAMBD from ?', OPTable)
print cursor.fetchone().RLAMBD
 

выдает эту ошибку:

 ProgrammingError: ('42S02', '[42S02] [Oracle][ODBC][Ora]ORA-00903: invalid table namen (903) (SQLExecDirectW)')
 

OPTable — это буквенно-цифровая строка, которую я построил из другого запроса базы данных, содержащего имя таблицы, из которой я хочу выбрать.

Следующий код отлично работает в том же скрипте.

 sql = 'select RLAMBD from '   OPTable
cursor.execute(sql)
print cursor.fetchone().RLAMBD
 

Я думаю, что это не так уж и важно-создавать sql-операторы таким образом, но я просто не понимаю, почему он не принимает ? параметры. У меня даже есть другой запрос в том же скрипте, который использует ? параметризация и работает просто отлично. Однако параметры для рабочего запроса создаются с помощью функции raw_input. Есть ли какая-то тонкая разница между тем, как могут быть отформатированы эти две строки, которая мешает мне заставить запрос работать? Спасибо вам всем.

Я использую python 2.7 и pyodbc 3.0.10.

Комментарии:

1. Я не думаю, что имя таблицы может быть передано в качестве такого параметра, но я могу ошибаться.

Ответ №1:

Заполнители параметров нельзя использовать для представления имен объектов (например, имен таблиц или столбцов) или ключевых слов SQL. Они используются только для передачи значений данных, например, чисел, строк, дат и т.д..

Комментарии:

1. А, ну ладно, стреляй. Итак, строится ли строка отдельно таким образом, чтобы у меня был «правильный» способ сделать это тогда?

2. Да, в подобных случаях нам нужно «собрать» текст команды SQL, но обратите внимание, что мы все равно должны использовать параметры для значений , например, sql = 'SELECT colname FROM "{}" WHERE id=?'.format(table_name)