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

Как да ускорите вмъкването от pandas.DataFrame .to_sql

Проблемът тук е, че за всеки ред се прави заявка за вмъкване, след което преди вмъкването на следващия ред се изчаква ACK.

Опитайте да стартирате този фрагмент преди import pandas as pd

from pandas.io.sql import SQLTable

def _execute_insert(self, conn, keys, data_iter):
    print("Using monkey-patched _execute_insert")
    data = [dict((k, v) for k, v in zip(keys, row)) for row in data_iter]
    conn.execute(self.insert_statement().values(data))

SQLTable._execute_insert = _execute_insert

Това е корекция от nhockham на to_sql вмъкване, което вмъква ред по ред. Ето проблема с github.

Ако можете да се откажете от използването на pandas.to_sql, предлагам ви да опитате групово вмъкване на sql-alchemy или просто да напишете скрипт, за да направите сами многоредова заявка.

Редактиране:За да изясним, ние модифицираме метода _execute_insert на Class SQLTable в pandas.io.sql, така че това трябва да се добави в скриптовете преди импортирането на модула pandas.

Последният ред е промяната.

conn.execute(self.insert_statement(), data) е променено на :

conn.execute(self.insert_statement().values(data))

Първият ред ще вмъква ред по ред, докато последният ред ще вмъква всички редове в един sql израз.

Актуализация:За по-новите версии на pandas ще ни е необходима лека модификация на горната заявка.

from pandas.io.sql import SQLTable

def _execute_insert(self, conn, keys, data_iter):
    print("Using monkey-patched _execute_insert")
    data = [dict(zip(keys, row)) for row in data_iter]
    conn.execute(self.table.insert().values(data))

SQLTable._execute_insert = _execute_insert



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Условия за дата с помощта на логика на търсене

  2. Как да подготвим изявление за заявка за актуализиране?

  3. Обработка на транзакция в многонишкова среда

  4. Обработка на цикъл while и групиране на MYSQL PHP стойности

  5. Как да добавя обща сума като последен ред в моя sql?