Problemet her er for hver række, der laves en insert-forespørgsel, og før næste række-insert venter den på ACK.
Prøv at køre dette uddrag før 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
Dette er en patch fra nhockham på to_sql insert som indsætter linje for linje. Her er github-problemet.
Hvis du kan undlade at bruge pandas.to_sql, foreslår jeg, at du prøver sql-alchemy bulk insert eller bare skriver et script for at lave en forespørgsel med flere rækker selv.
Edit:For at præcisere ændrer vi _execute_insert-metoden for Class SQLTable i pandas.io.sql, så dette skal tilføjes i scripts før import af pandas-modulet.
Den sidste linje er ændringen.
conn.execute(self.insert_statement(), data)
er blevet ændret til :
conn.execute(self.insert_statement().values(data))
Den første linje vil indsætte række for række, mens sidste linje vil indsætte alle rækker i en sql-sætning.
Opdatering:For nyere versioner af pandaer skal vi have en lille ændring af ovenstående forespørgsel.
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