4

我将数据从一个数据库插入到另一个数据库,所以我有 2 个连接(Conn1 和 Conn2)。下面是代码(使用 pypyodbc)。

 import pypyodbc

 Conn1_Query = "SELECT column FROM Table"

 Conn1_Cursor.execute(Conn1_Query)
 Conn1_Data = Conn1_Cursor.fetchall()

 Conn1_array = []

 for row in Conn1_Data:
      Conn1_array.append(row)

上面的部分运行得非常快。

 stmt = "INSERT INTO TABLE(column) values (?)"
 Conn2_Cursor.executemany(stmt, Conn1_array)
 Conn2.commit()

这部分非常慢。我还尝试使用 cursor.execute 执行一个 for 循环来一次插入每一行,但这也很慢。我做错了什么,有什么办法可以加快速度吗?谢谢参观。

我想我还应该补充一点,Conn1 数据只有约 50k 行。我在开始时还有一些我没有包含的设置代码,因为它与问题无关。插入大约需要 15 分钟。作为比较,将输出写入 csv 文件大约需要 25 秒。

4

1 回答 1

1

是的,executemany在 pypyodbc 下为每一行发送单独的 INSERT 语句。execute它的作用与在循环中进行单个调用相同。鉴于 pypyodbc 不再处于积极开发中,这不太可能改变。

但是,如果您使用“ODBC Driver xx for SQL Server”之类的兼容驱动程序并切换到 pyodbc,则可以使用其fast_executemany选项来显着加快插入速度。有关更多详细信息,请参阅此答案

于 2018-12-20T17:58:54.110 回答