批次插入操作可以顯著提高將大型資料集插入 Microsoft SQL Server 的效能。本文探討了優化此類插入的替代方法,解決問題中提供的程式碼所面臨的具體挑戰。
快速執行許多(Pyodbc 4.0.19):Pyodbc (4.0.19) 的最新版本提供了Cursorfast_exeexecuteman功能,旨在加快多行插入的執行速度。透過將 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中文網其他相關文章!