Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara mempercepat penyisipan massal ke MS SQL Server menggunakan pyodbc

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menemukan Nama Batasan di SQL Server

  2. Bagaimana MENGUBAH Parameter Nilai Tabel

  3. Tidak dapat memotong tabel karena direferensikan oleh batasan KUNCI ASING - Tutorial SQL Server / TSQL Bagian 70

  4. Kunci Asing ke beberapa tabel

  5. Tambahkan Offset Zona Waktu ke Nilai datetime2 di SQL Server (T-SQL)