2007年10月8日 星期一

在 python 中使用 sqlite3 模組注意事項

最近某個程式用到了 python 的 sqlite3 模組,所以才發現這些問題... 剛剛上網翻了翻才找到問題點,在這邊簡短紀錄一下:

第一點就是,在執行完 SQL 執行語句後,在最後要記得加上 commit(),注意這個 commit() 是在 Connection Objects 中。原因在於 sqlite3 模組預設會自動幫你在最一開始加上 BEGIN 語句,所以若是沒有在最後執行 commit(),則剛剛執行過的都會被 ROLLBACK。當然你也可以將 isolation_level 設為 None 來啟用 autocommit,但是為了效能問題還是別這樣吧...

第二個需要注意的只是備忘 XD,以下簡單描述一下各 isolation level 的特色,原始說明可參考這裡
  • DEFERRED: 延遲鎖定,當執行了 BEGIN 時,並不會馬上鎖定,會一直等到有存取資料庫的動作時,鎖定才會發生作用,所以這可能會造成你資料被別的行程更動。
  • IMMEDIATE: 立即鎖定,當執行了 BEGIN 時馬上發生作用,此時別人只能讀取資料庫,但是不能更動,直到你 COMMIT/ROLLBACK。
  • EXCLUSIVE: 獨占鎖定,當執行了 BEGIN 時,會馬上鎖定,此時別人無法存取資料庫,直到你 COMMIT/ROLLBACK。


Powered by ScribeFire.

意見:

sqlite小东西还有事务这些功能,挺不错,感谢分享。