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

Python 2.7 从pyodbc切换到pymssql后参数化查询出现语法错误,python-2.7,sql-server-2008,pyodbc,pymssql,executemany,Python 2.7,Sql Server 2008,Pyodbc,Pymssql,Executemany,我有13-15MB原始文件将其数据加载到DB中,使用pyodbc的ExecuteMy插入大约30k-35k行需要50-55min左右,工作正常,但处理时间很长 为了测试性能,我尝试了pymssql,但这里显示了语法错误 x = [('a',1),('b',2).... ] # inserting only 999 rows at a time qry = "INSERT INTO ["+tablename+"] VALUES({}) ".format(placeholders) cursor.

我有13-15MB原始文件将其数据加载到DB中,使用pyodbc的ExecuteMy插入大约30k-35k行需要50-55min左右,工作正常,但处理时间很长

为了测试性能,我尝试了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(?,?,?,?,?,?,?,?,?,?,?,?...) 
在executemany()中,错误如下

错误:

loadData中出错(102,“靠近“?”的语法不正确。DB Lib错误消息20018,严重性15:\n一般SQL Server错误:检查来自SQL Server的消息\n”

Python的规范定义了几个实现者可以使用的规范

pyodbc采用了“qmark”样式,这是ODBC最常用的样式

插入到tablename(col1,col2)值(?,)
而pymssql选择了“格式”样式

插入到tablename(col1,col2)值(%s,%s)
请注意,由于历史原因,pymssql支持
%d
以及
%s
,但我们不需要将
%s
用于字符串,将
%d
用于数字;
%s
在所有情况下都有效,并且是首选的占位符。

Python的规范定义了实现人员可以使用的几个占位符

pyodbc采用了“qmark”样式,这是ODBC最常用的样式

插入到tablename(col1,col2)值(?,)
而pymssql选择了“格式”样式

插入到tablename(col1,col2)值(%s,%s)

请注意,由于历史原因,pymssql支持
%d
%s
,但我们不需要对字符串使用
%s
,对数字使用
%d
%s
在所有情况下都有效,并且是首选的占位符。

占位符是什么大约有89列。与pyodbcFor pymssql使用的语法相同,您需要将占位符从
更改为
%s
@GordThompson非常感谢它解决了我的问题,再次感谢
占位符是什么?它们是(?,,…)大约有89列。与pyodbcFor pymssql使用的语法相同,您需要将占位符从
更改为
%s
@GordThompson非常感谢它解决了我的问题,再次感谢感谢感谢Hanks的解释感谢解释