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