Il problema qui è che per ogni riga viene eseguita una query di inserimento, quindi prima dell'inserimento della riga successiva attende ACK.
Prova a eseguire questo snippet prima di 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
Questa è una patch di nhockham su to_sql inserto che inserisce riga per riga. Ecco il problema con github.
Se puoi rinunciare a usare pandas.to_sql, ti suggerisco di provare l'inserimento in blocco di sql-alchemy o semplicemente di scrivere uno script per creare una query multiriga da solo.
Modifica:per chiarire, stiamo modificando il metodo _execute_insert di Class SQLTable in pandas.io.sqlQuindi questo deve essere aggiunto negli script prima di importare il modulo Pandas.
L'ultima riga è il cambiamento.
conn.execute(self.insert_statement(), data)
è stato modificato in :
conn.execute(self.insert_statement().values(data))
La prima riga inserirà riga per riga mentre l'ultima riga inserirà tutte le righe in un'unica istruzione sql.
Aggiornamento:per le versioni più recenti di Panda, avremo bisogno di una leggera modifica della query precedente.
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