2012-01-12 59 views

回答

4

明確地鎖定數據庫的方法是啓動一個事務如documentation解釋:

當數據庫被多個連接進行訪問,和所述過程中的一個修改數據庫,SQLite數據庫被鎖定直到交易完成。發起交易

的一種方法是使用connection as a context manager

import sqlite3 
con = sqlite3.connect(...) 
... 
with con: 
    # Database is locked here 

還要注意,一些交易默認執行implictly

默認情況下,sqlite3的模塊之前打開交易隱含數據修改語言(DML)語句(即INSERT/UPDATE/DELETE/REPLACE),並在非DML非查詢語句之前隱式地提交事務 之前所提)。

+1

只是要清楚:如果我使用 '與CON' 把戲,難道我保證所有對該塊中的數據庫的讀寫操作都會一起發生? (也就是說,另一個線程不能改變我正在閱讀的內容)。 – 2012-01-12 01:01:11

+0

我發佈了一個後續問題http://stackoverflow.com/questions/9070369/locking-a-sqlite3-database-in-python-re-asking-for-澄清 – 2012-01-30 20:52:59

0

我們可以使用多進程命令來鎖定數據庫的寫入和讀取過程。我正在使用以下命令並且它的工作正常。 從多處理進口鎖 l.Lock() l.acquire() 讀/寫DB l.release()