格式化 pyodbc INSERT INTO 查询 SQL 服务器

Formatting for pyodbc INSERT INTO query SQL server

过去一周我在处理 1 个特定查询时遇到了问题。对于这种特定情况,我在网上找不到任何东西(或者至少我没有在搜索正确的东西),但肯定这是以前有人做过的事情。我在每个周期生成一个新的 table(有一个递增的 ID/key 列,我的数据有 3 列)所以 table 名称发生变化,然后放入一些数据(所有整数).导致错误的行是:

cursor.execute(''' INSERT INTO ? (column1, column2, column3) VALUES (?, ?, ?) ''' , tablename, rowData[0], rowData[1], rowData[2])

我得到的错误是:

('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the table variable "@P1". (1087) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (8180)')

我之前尝试过使用通常的 python 字符串格式和字典 '''INSERT INTO %(table)s VALUES %(list0)i, %(list1)i, %(list2)i ''' % {"table":tablename, "list0":list[0], "list1":list[1], "list2":list[2]}) 以及这两种格式的一些变体,但这些也导致了错误。

如有任何帮助,我们将不胜感激。

您认为应该使用参数化查询是对的,但查询参数只能用于插入列 ,而不能插入 column/table 名称。所以你需要混合使用动态 SQL 和查询参数化:

sql = "INSERT INTO [%s] (column1, column2, column3) VALUES (?, ?, ?)" % tablename
cursor.execute(sql, rowData[0], rowData[1], rowData[2])