Het probleem hier is dat voor elke rij een invoegquery wordt gemaakt, en voordat de volgende rij wordt ingevoegd, wordt gewacht op ACK.
Probeer dit fragment uit te voeren voordat u 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
Dit is een patch van nhockham op to_sql insert die regel voor regel invoegt. Dit is het github-probleem.
Als je kunt afzien van het gebruik van pandas.to_sql, raad ik je aan om sql-alchemy bulk insert te proberen of gewoon een script te schrijven om zelf een query met meerdere rijen te maken.
Bewerken:ter verduidelijking wijzigen we de _execute_insert-methode van Class SQLTable in pandas.io.sql. Dit moet dus worden toegevoegd in de scripts voordat de pandas-module wordt geïmporteerd.
De laatste regel is de wijziging.
conn.execute(self.insert_statement(), data)
is gewijzigd in :
conn.execute(self.insert_statement().values(data))
De eerste regel voegt rij voor rij in, terwijl de laatste regel alle rijen in één sql-instructie invoegt.
Update:voor nieuwere versies van panda's hebben we een kleine wijziging van de bovenstaande vraag nodig.
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