Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да ускорите груповото вмъкване в MS SQL Server с помощта на pyodbc

Както е отбелязано в коментар към друг отговор, 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 секунда.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Върнете името на локалния сървър в SQL Server с @@SERVERNAME

  2. Какъв е еквивалентът на 'describe table' в SQL Server?

  3. Трябва ли MAMP да върне ::1 като IP на localhost?

  4. Как да използвате Top with Ties в SQL Server - SQL Server / TSQL урок, част 114

  5. Как да създадете уникално ограничение за колона за вече съществуваща таблица - SQL Server / TSQL урок, част 97