批量插入操作可以显着提高将大型数据集插入 Microsoft SQL Server 的性能。本文探讨了优化此类插入的替代方法,解决问题中提供的代码所面临的具体挑战。
快速执行许多(Pyodbc 4.0.19): Pyodbc (4.0.19) 的最新版本提供了Cursor#fast_executemany 功能,旨在加速多行插入的执行。通过将 crsr.fast_executemany 设置为 True,与默认的executemany 方法相比,您可能会获得显着的性能提升。
<code class="python"># Connect to the database and create a cursor with fast_executemany enabled cnxn = pyodbc.connect(conn_str, autocommit=True) crsr = cnxn.cursor() crsr.fast_executemany = True # Execute the bulk insert operation with parameters sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)" params = [(data1, data2) for (record_id, data1, data2) in data] crsr.executemany(sql, params)</code>
使用 Pandas DataFrame 进行迭代: ,您可以使用 Pandas 将 CSV 数据读入 DataFrame 并利用其优化的 to_sql() 方法。这种方法简化了数据插入并支持各种优化,例如分块和类型转换。
<code class="python">import pandas as pd # Read CSV data into a DataFrame df = pd.read_csv(csv_file) # Establish a database connection engine = sqlalchemy.create_engine(conn_str) # Insert DataFrame into the database using `to_sql()` df.to_sql('table_name', con=engine, if_exists='append', index=False)</code>
批量复制接口 (BCP):批量复制接口 ( BCP)是一个本机 SQL Server 实用程序,允许在文件和数据库表之间进行高速数据传输。与标准 SQL INSERT 语句相比,BCP 具有多种性能优势。
bcp {table_name} in {csv_file} -S {server} -d {database} -E
适合您的特定场景的最佳方法取决于数据大小、服务器等因素配置和可用资源。一般来说,fast_executemany 比通过游标迭代提供了显着的性能改进,而 BCP 在批量插入场景中通常优于这两种情况。
以上是如何使用 Pyodbc 加速 MS SQL Server 的批量插入?的详细内容。更多信息请关注PHP中文网其他相关文章!