В вашем первом случае подстановка параметров не работает для имен таблиц / столбцов.Это характерно для подавляющего большинства (если не всех) платформ баз данных.
Во втором случае SQL Server не поддерживает замену параметров для операторов DDL.Драйвер ODBC для SQL Server преобразует заполнители параметра pyodbc (?
) в заполнители параметра T-SQL (@P1
, @P2
, ...), поэтому оператор, передаваемый в SQL Server, имеет вид
CREATE TABLE table_2 (id int IDENTITY(1,1) PRIMARY KEY, obj varchar(@P1) NOT NULL
в частности
exec sp_prepexec @p1 output,N'@P1 int',N'CREATE TABLE table_2 (id int IDENTITY(1,1) PRIMARY KEY, obj varchar(@P1) NOT NULL',123
, и когда SQL Server пытается подготовить этот оператор, он ожидает буквальное значение, а не заполнитель параметра.
Итак, в обоих случаях вам нужно будет использовать динамический SQL (форматирование строки) для вставки соответствующих значений.