Problemet här är att för varje rad en infogningsfråga görs, innan nästa rad infogning väntar den på ACK.
Testa att köra det här utdraget innan du 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
Det här är en patch av nhockham på to_sql insert som infogar rad för rad. Här är github-problemet.
Om du kan avstå från att använda pandas.to_sql föreslår jag att du provar sql-alchemy bulk insert eller bara skriver ett skript för att göra en flerradsfråga själv.
Edit:För att förtydliga ändrar vi _execute_insert-metoden för klass SQLTable i pandas.io.sql, så detta måste läggas till i skripten innan du importerar pandasmodulen.
Den sista raden är förändringen.
conn.execute(self.insert_statement(), data)
har ändrats till :
conn.execute(self.insert_statement().values(data))
Den första raden infogar rad för rad medan den sista raden infogar alla rader i en sql-sats.
Uppdatering:För nyare versioner av pandor kommer vi att behöva en liten modifiering av ovanstående fråga.
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