В этой таблице:
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
В pyobbc поток executemany
равен:
- подготовить выражение
- для каждого набора параметров
- связывает набор параметров
- выполнить
В ceODBC поток executemany
равен:
- подготовить выражение
- привязать все параметры
- выполнить