2017-07-19 110 views
0

13-15MB原始文件,以它的數據加載到數據庫,並且它大約需要50-55mins插入使用executemany各地30K-35K行與pyodbc和它工作正常,但其處理時間很長。語法錯誤與參數化查詢從pyodbc切換後pymssql

爲了測試我試圖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"

+0

什麼是「佔位符」? –

+0

這些是(?,?,....)是大約89列..與pyodbc相同的語法 –

+0

對於pymssql,您將需要將佔位符從'?改變爲'%s'。 –

回答

2

Python的DB-API 2.0規範定義了實施者可以使用的幾個parameter styles

pyodbc通過了 「QMARK」 風格,是ODBC

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

最常見的風格,同時pymssql選擇了 「格式」 風格

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

注意,由於歷史原因pymssql支持%d以及%s,但我們不需要使用字符串%s和數字%d; %s適用於所有情況,並且是首選的佔位符。

+0

感謝您的解釋 –