我试图让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)
效果很好。
是否有更好的方法让它发挥作用?
答案 0 :(得分:1)
T-SQL中的表名(和列)名称不允许使用?
parameter占位符。
第二个选项是在Python中使用字符串格式化在针对数据库服务器执行之前构建T-SQL语句。这也称为dynamic SQL,是使用BULK INSERT
完成任务的唯一方法。
动态SQL(以及一般未经验证的输入)引入了SQL injection漏洞,因此如果这是面向用户的脚本,请确保验证tableName
和fileName
变量。