从 pyodbc 切换到 pymssql 后参数化查询出现语法错误

Syntax error with parameterized queries after switching from pyodbc to pymssql

我有 13-15MB 个原始文件来将其数据加载到数据库中,插入大约需要 50-55 分钟 30k-35k 行使用 executemany 和 pyodbc,它工作正常,但它的处理时间很长。

为了测试性能,我尝试了 pymssql,但它在这里显示语法错误

x = [('a',1),('b',2).... ]  # inserting only 999 rows at a time
qry = "INSERT INTO ["+tablename+"] VALUES({}) ".format(placeholders)
cursor.executemany(qry,x)

print qry
 # INSERT INTO [my_T] VALUES(?,?,?,?,?,?,?,?,?,?,?,?...) 

A​​T executemany() 抛出错误

错误:

Error in loadData (102, "Incorrect syntax near '?'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n"

Python 的 DB-API 2.0 specification defines several parameter styles 实现者可以使用。

pyodbc 采用了 "qmark" 风格,这是 ODBC 最常见的风格

INSERT INTO tablename (col1, col2) VALUES (?, ?)

而 pymssql 选择了 "format" 风格

INSERT INTO tablename (col1, col2) VALUES (%s, %s)

请注意,由于历史原因,pymssql 支持 %d 以及 %s,但我们不需要对字符串使用 %s,对数字使用 %d%s 适用于所有情况,是首选占位符。