2011-04-08 48 views
1

我試圖在一個拉伸中插入超過40,000條記錄到sqlite3。在sqlite3中插入大量記錄(超過40,000)的優化方法是什麼

以最少的時間插入它們的最佳方法是什麼?

我已經在Java中使用了準備語句,並且知道預編譯的sql語句與原始sql查詢相比更快。我無法使用python在sqlite3內部使用prepared語句來查找插入記錄的代碼片段。任何指針在這個方向將不勝感激。

我甚至對準備好的陳述的任何其他替代方案都開放。

謝謝。

+0

我會感興趣的是如何更快地改用純文字方式executemany。當然,這並不能用腳本方式計算最終的sql注入(executemany更安全)。 – 2011-04-08 11:35:17

+0

之前使用的是executecript,40,000個記錄所用的時間是8.3分鐘,而executemany的時間縮短到了2.1秒。具有128MB RAM和1 GHz處理器的嵌入式設備的驚人性能!可能是這是你感興趣的:-) – 2011-04-18 10:07:32

+0

謝謝,正是我所尋找的 – 2011-04-18 12:39:56

回答

8

您應該使用executemany用適當的迭代器

+0

我使用一箇中間函數計算插入查詢之前執行它..所以我在做什麼是concatinating這些計算插入查詢和當前正在執行它與cursor.executescript(..)我不知道如何在這種情況下用戶executemany()? – 2011-04-08 11:12:59

+1

最簡單的方法是在一個迭代器'cur.executemany(「insert into characters(c,b)values(?,?)」,[(「c1」,「b1」),( 「c2」,「b2」)])'這不是有效的內存,但應該覆蓋你的用例 – 2011-04-08 11:27:49

相關問題