Както е отбелязано в коментар към друг отговор, T-SQL BULK INSERT
командата ще работи само ако файлът, който ще бъде импортиран, е на същата машина като екземпляра на SQL Server или е в мрежово местоположение на SMB/CIFS, което екземплярът на SQL Server може да чете. По този начин може да не е приложимо в случай, когато изходният файл е на отдалечен клиент.
pyodbc 4.0.19 добави функция Cursor#fast_executemany, която може да бъде полезна в този случай. fast_executemany
е "изключено" по подразбиране, а следният тестов код ...
cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("TRUNCATE TABLE fast_executemany_test")
sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
params = [(f'txt{i:06d}',) for i in range(1000)]
t0 = time.time()
crsr.executemany(sql, params)
print(f'{time.time() - t0:.1f} seconds')
... отне приблизително 22 секунди, за да се изпълни на моята тестова машина. Просто добавяне на crsr.fast_executemany = True
...
cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("TRUNCATE TABLE fast_executemany_test")
crsr.fast_executemany = True # new in pyodbc 4.0.19
sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
params = [(f'txt{i:06d}',) for i in range(1000)]
t0 = time.time()
crsr.executemany(sql, params)
print(f'{time.time() - t0:.1f} seconds')
... намали времето за изпълнение до малко над 1 секунда.