利用这种表:pyodbc - 非常缓慢的批量插入速度
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
的流程是:
- 准备发言
- 绑定的所有参数
- 执行
尝试使用显式事务。 – 2011-04-17 13:55:48
阅读http://stackoverflow.com/questions/1063770/in-python-using-pyodbc-how-do-you-perform-transactions,它似乎并不像pyodbc支持显式事务。 – sayap 2011-04-17 14:26:04
这不是我读它的方式。您关闭自动提交,并且必须显式调用回滚或提交。但是,我不知道它是否有所作为,但是我会尝试自己。 – 2011-04-17 15:31:48