从 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(?,?,?,?,?,?,?,?,?,?,?,?...)
AT 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
适用于所有情况,是首选占位符。
我有 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(?,?,?,?,?,?,?,?,?,?,?,?...)
AT 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
适用于所有情况,是首选占位符。