Som noterats i en kommentar till ett annat svar, T-SQL BULK INSERT
kommandot fungerar bara om filen som ska importeras finns på samma maskin som SQL Server-instansen eller är på en SMB/CIFS-nätverksplats som SQL Server-instansen kan läsa. Därför kanske det inte är tillämpligt i de fall där källfilen finns på en fjärrklient.
pyodbc 4.0.19 lade till en Cursor#fast_executemany-funktion som kan vara till hjälp i så fall. fast_executemany
är "av" som standard, och följande testkod ...
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')
... tog ungefär 22 sekunder att köra på min testmaskin. Lägg bara till 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')
... minskade exekveringstiden till drygt 1 sekund.