有了这张表:
CREATE TABLE test_insert (
col1 INT,
col2 VARCHAR(10),
col3 DATE
)
以下代码需要 40 秒才能运行:
import pyodbc
from datetime import date
conn = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};'
'SERVER=localhost;DATABASE=test;UID=xxx;PWD=yyy')
rows = []
row = [1, 'abc', date.today()]
for i in range(10000):
rows.append(row)
cursor = conn.cursor()
cursor.executemany('INSERT INTO test_insert VALUES (?, ?, ?)', rows)
conn.commit()
与 psycopg2 等效的代码只需要 3 秒。我不认为 mssql 比 postgresql 慢得多。关于在使用 pyodbc 时如何提高批量插入速度的任何想法?
编辑:在 ghoerz 的发现之后添加一些注释
在pyodbc中,流程executemany
为:
- 准备声明
- 循环每组参数
- 绑定参数集
- 执行
在ceODBC中,流程executemany
为:
- 准备声明
- 绑定所有参数
- 执行