O problema aqui é para cada linha que uma consulta de inserção é feita, então antes da próxima inserção de linha ela espera por ACK.
Tente executar este trecho antes de
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
Este é um patch de nhockham em to_sql insert que insere linha por linha. Aqui está o problema do github.
Se você puder renunciar ao uso do pandas.to_sql, sugiro que tente inserir em massa sql-alchemy ou apenas escreva um script para fazer uma consulta multilinha por conta própria.
Edit:Para esclarecer, estamos modificando o método _execute_insert da classe SQLTable em pandas.io.sqlEntão isso deve ser adicionado nos scripts antes de importar o módulo pandas.
A última linha é a mudança.
conn.execute(self.insert_statement(), data)
foi alterado para:conn.execute(self.insert_statement().values(data))
A primeira linha inserirá linha por linha, enquanto a última linha inserirá todas as linhas em uma instrução sql.
Atualização:para versões mais recentes de pandas, precisaremos de uma pequena modificação na consulta acima.
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