首页  >  文章  >  后端开发  >  如何使用 Pyodbc 优化 MS SQL Server 的批量插入速度?

如何使用 Pyodbc 优化 MS SQL Server 的批量插入速度?

Barbara Streisand
Barbara Streisand原创
2024-11-02 09:12:29965浏览

How to Optimize Bulk Insert Speed to MS SQL Server Using Pyodbc?

使用 Pyodbc 加速向 MS SQL Server 的批量插入

在这段代码中,作者的目标是优化向 MS SQL Server 数据库中插入超过 130 万行的操作。目前,插入 300,000 行的过程大约需要 40 分钟。根据提供的代码,建议采用以下方法来提高插入速度:

利用 Bulk Insert T-SQL 命令

T-SQL BULK INSERT 命令专为高效批量数据而设计加载中。但是,它要求源文件位于与 SQL Server 实例相同的计算机上,或者位于可通过 SMB/CIFS 访问的网络位置。

利用 Pyodbc 的 fast_executemany 功能

Pyodbc 4.0.19在其 Cursor 类中引入了 fast_executemany 功能。启用后,此功能会优化executemany查询的执行,其中涉及插入多行数据。

以下代码演示了如何使用fast_executemany:

<code class="python">import pyodbc
import time

conn_str = 'connection string'

cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("TRUNCATE TABLE fast_executemany_test")

sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
params = [(f'txt{i:06d}',) for i in range(1000)]
t0 = time.perf_counter()
crsr.executemany(sql, params)
print(f'{time.perf_counter() - t0:.1f} seconds')

crsr.fast_executemany = True
t0 = time.perf_counter()
crsr.executemany(sql, params)
print(f'{time.perf_counter() - t0:.1f} seconds')</code>

在上面的代码中,启用fast_executemany 显着减少了执行时间。

优化行迭代

不要逐行迭代,可以考虑使用列表或 NumPy 数组来存储数据,然后插入整个集合在单个执行许多调用中。这种方法消除了重复游标执行的开销。

通过实现这些优化,可以使用 pyodbc 大幅增强 MS SQL Server 中批量插入操作的性能。

以上是如何使用 Pyodbc 优化 MS SQL Server 的批量插入速度?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn