ここでの問題は、各行に対して挿入クエリが実行され、次の行が挿入される前にACKを待機することです。
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
これは、nhockham によるパッチです。 行ごとに挿入するto_sql挿入。 これが、githubの問題です。
pandas.to_sqlの使用をやめることができる場合は、sql-alchemyの一括挿入を試すか、スクリプトを記述して自分で複数行のクエリを作成することをお勧めします。
編集:明確にするために、pandas.io.sqlのクラスSQLTableの_execute_insertメソッドを変更しているため、pandasモジュールをインポートする前にこれをスクリプトに追加する必要があります。
最後の行は変更です。
conn.execute(self.insert_statement(), data)
に変更されました:
conn.execute(self.insert_statement().values(data))
最初の行は行ごとに挿入され、最後の行はすべての行を1つのSQLステートメントに挿入します。
更新:パンダの新しいバージョンでは、上記のクエリを少し変更する必要があります。
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