Проблемът тук е, че за всеки ред се прави заявка за вмъкване, след което преди вмъкването на следващия ред се изчаква 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 или просто да напишете скрипт, за да направите сами многоредова заявка.
Редактиране:За да изясним, ние модифицираме метода _execute_insert на Class SQLTable в pandas.io.sql, така че това трябва да се добави в скриптовете преди импортирането на модула pandas.
Последният ред е промяната.
conn.execute(self.insert_statement(), data)
е променено на :
conn.execute(self.insert_statement().values(data))
Първият ред ще вмъква ред по ред, докато последният ред ще вмъква всички редове в един sql израз.
Актуализация:За по-новите версии на pandas ще ни е необходима лека модификация на горната заявка.
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