Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przyspieszyć wstawianie z pandas.DataFrame .to_sql

Problem polega na tym, że dla każdego wiersza wykonywane jest zapytanie wstawiające, a następnie przed wstawieniem następnego wiersza czeka na ACK.

Spróbuj uruchomić ten fragment kodu przed 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

To jest łatka autorstwa nhockham na wstawce to_sql, która wstawia wiersz po wierszu. Oto problem z githubem.

Jeśli możesz zrezygnować z używania pandas.to_sql, sugeruję wypróbowanie wstawiania zbiorczego sql-alchemy lub po prostu napisanie skryptu, aby samodzielnie wykonać zapytanie wielowierszowe.

Edycja:Aby wyjaśnić, modyfikujemy metodę _execute_insert klasy SQLTable w pandas.io.sqlWięc należy to dodać w skryptach przed zaimportowaniem modułu pandas.

Ostatnia linia to zmiana.

conn.execute(self.insert_statement(), data) została zmieniona na :

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

Pierwsza linia wstawi wiersz po wierszu, podczas gdy ostatni wiersz wstawi wszystkie wiersze w jednej instrukcji sql.

Aktualizacja:w przypadku nowszych wersji pand będziemy potrzebować niewielkiej modyfikacji powyższego zapytania.

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. Różnica w miesiącach między datami w MySQL

  2. MIN() – Znajdź minimalną wartość w kolumnie w MySQL

  3. Zmodyfikuj wszystkie kolumny w tabeli, aby „nie były puste” bez względu na wszystko

  4. Jak uzyskać aktualną datę w MySQL?

  5. najlepszy samouczek dotyczący korzystania z frameworka encji, POCO i MySQL