我试图通过清理 csv 文件让 Python 填充 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)
它完美地工作。
有没有更好的方法让它工作?
使用 ?
parameter T-SQL 中的表名称(和列)名称不允许使用占位符。
第二个选项是在对数据库服务器执行之前,使用 Python 中的字符串格式来构建 T-SQL 语句。这也称为 dynamic SQL ,并且是使用 BULK INSERT
完成任务的唯一方法。
动态 SQL(以及一般未经验证的输入)引入了 SQL injection漏洞,因此如果这是面向用户的脚本,请确保您正在验证 tableName
和 fileName
变量。
我是一名优秀的程序员,十分优秀!