原理:文件數據庫sqlite,同一時刻允許多個進程/線程讀,但同一時刻只允許一個線程寫。在操行寫操作時,數據庫文件被瑣定,此時任何其他讀/寫操作都被阻塞,如果阻塞超過5秒鍾(默認是5秒,能過重新編譯sqlite可以修改超時時間),就報"database is locked"錯誤。
所以,在操作sqlite時,應該即時關閉連接;打開連接后,盡量減少非常費時的操作。
知道了原理,也知道了一些注意點,並不意味着不會犯錯。如果下面一段使用sqlalchemy來操作sqlite的代碼:
相信你一定看出這段代碼的問題,也明白該怎么修改這段代碼。但這個錯誤,我不至犯了一次,而且在多次犯同樣錯誤之前,我早就知道原理,但還是犯錯誤。原因我想還是太輕率,太隨意。