關於sqlite中的一個錯誤 “database is locked"


原理:文件數據庫sqlite,同一時刻允許多個進程/線程讀,但同一時刻只允許一個線程寫。在操行寫操作時,數據庫文件被瑣定,此時任何其他讀/寫操作都被阻塞,如果阻塞超過5秒鍾(默認是5秒,能過重新編譯sqlite可以修改超時時間),就報"database is locked"錯誤。

       所以,在操作sqlite時,應該即時關閉連接;打開連接后,盡量減少非常費時的操作。

       知道了原理,也知道了一些注意點,並不意味着不會犯錯。如果下面一段使用sqlalchemy來操作sqlite的代碼:

 

相信你一定看出這段代碼的問題,也明白該怎么修改這段代碼。但這個錯誤,我不至犯了一次,而且在多次犯同樣錯誤之前,我早就知道原理,但還是犯錯誤。原因我想還是太輕率,太隨意。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM