Problém je v tom, že pro každý řádek je vytvořen dotaz na vložení, pak před vložením dalšího řádku čeká na ACK.
Zkuste tento úryvek spustit před 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
Toto je oprava od nhockham na to_sql insert, který vkládá řádek po řádku. Zde je problém s githubem.
Pokud se můžete vzdát používání pandas.to_sql, doporučuji vám zkusit hromadné vkládání sql-alchemy nebo napsat skript, abyste sami vytvořili víceřádkový dotaz.
Edit:Abychom objasnili, upravujeme metodu _execute_insert třídy SQLTable v pandas.io.sqlTakže to musí být přidáno do skriptů před importem modulu pandas.
Poslední řádek je změna.
conn.execute(self.insert_statement(), data)
byl změněn na :
conn.execute(self.insert_statement().values(data))
První řádek vloží řádek po řádku, zatímco poslední řádek vloží všechny řádky do jednoho příkazu SQL.
Aktualizace:Pro novější verze pand budeme potřebovat mírnou úpravu výše uvedeného dotazu.
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