Pyodbc批量插入语句不会参数化

时间:2014-06-12 16:35:49

标签: python sql pyodbc

我试图让Python通过清理csv文件来填充SQL表,然后在SQL中进行批量上传。当我尝试以下列方式执行插入时:

sqlCommand = "BULK INSERT ? FROM ? WITH ( BATCHSIZE = 1000, ROWTERMINATOR = '\\n', KEEPNULL )"
cursor.execute(sqlCommand,tableName,fileName)

我收到以下错误:' @ P1'附近的语法不正确。 (102)(SQLExecDirectW);

但是,如果我这样做:

"BULK INSERT {0} FROM {1} WITH ( BATCHSIZE = 1000, ROWTERMINATOR = '\\n', KEEPNULLS )".format(tableName,fileName)
cursor.execute(sqlCommand)

效果很好。

是否有更好的方法让它发挥作用?

1 个答案:

答案 0 :(得分:1)

T-SQL中的表名(和列)名称不允许使用? parameter占位符。

第二个选项是在Python中使用字符串格式化在针对数据库服务器执行之前构建T-SQL语句。这也称为dynamic SQL,是使用BULK INSERT完成任务的唯一方法。

动态SQL(以及一般未经验证的输入)引入了SQL injection漏洞,因此如果这是面向用户的脚本,请确保验证tableNamefileName变量。