2014-06-23 46 views
1

我想優化我的SQLite3插入,因爲我正在處理一些大型數據集。Python SQLite3 - 它是否在每個插入語句上開始,結束事務?

我想知道的是,如果.execute(「INSERT ...」)語句爲每個執行語句開始並結束一個事務?或者它只是在第一次執行時執行一個BEGIN,並等待執行.commit()操作,因此我可以執行10,000個.execute命令,然後執行.commit(),因此我只做了一個事務?

我並不十分清楚故事的這一面,我真的很感謝這方面的任何投入。

回答

0

從SQLite的優化​​常見問題[1]:

,除非已經在交易中,每個SQL語句有一個新的 交易開始吧。這非常昂貴,因爲它需要 重新打開,寫入並關閉每個 聲明的日誌文件。這可以通過用BEGIN TRANSACTION包裝SQL語句序列 來避免;和END TRANSACTION;聲明。這種加速 也獲得了不改變數據庫的語句。

所以,有兩種方式:

  1. 使用executemany()方法。
  2. 使用明確的BEGINCOMMIT聲明。

[1] http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

+0

使用Python'sqlite3'模塊時,這是不正確的。 –

0

documentation說:

默認情況下,sqlite3的模塊打開交易數據修改語言(DML)語句之前隱式(即INSERT/UPDATE/DELETE/REPLACE),以及之前提交交易隱含非DML非查詢語句(即除SELECT或前述之外的任何內容)。

相關問題