Sebagaimana dicatat dalam komentar untuk jawaban lain, T-SQL BULK INSERT
perintah hanya akan berfungsi jika file yang akan diimpor berada di mesin yang sama dengan instance SQL Server atau berada di lokasi jaringan SMB/CIFS yang dapat dibaca oleh instance SQL Server. Oleh karena itu, ini mungkin tidak berlaku dalam kasus di mana file sumber berada di klien jarak jauh.
pyodbc 4.0.19 menambahkan fitur Cursor#fast_executemany yang mungkin membantu dalam kasus itu. fast_executemany
adalah "mati" secara default, dan kode pengujian berikut ...
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')
... membutuhkan waktu sekitar 22 detik untuk dieksekusi pada mesin uji saya. Cukup tambahkan 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')
... mengurangi waktu eksekusi menjadi lebih dari 1 detik.