这里的问题是对每一行进行插入查询,然后在下一行插入之前等待 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 https://github.com/nhockham在 to_sql insert 上逐行插入。这是 github 问题。 https://github.com/pandas-dev/pandas/issues/8953
如果您可以放弃使用 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))
第一行将逐行插入,而最后一行将在一个 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