2016-03-21 85 views
2

我有一個python腳本,它創建一個數據庫,然後進入一個無限循環,每秒運行一次,用一些選擇查詢數據庫。SQLite數據庫被SELECT子句鎖定

同時我用sqlite cli連接到數據庫並嘗試進行更新,但是我得到一個數據庫被鎖定的錯誤。

下面的腳本(匿名)代碼:

import sqlite3 
import time 

con = sqlite3.connect(r'path\to\database.sqlite') 

con.execute('DROP TABLE IF EXISTS blah;') 
con.execute('CREATE TABLE blah;') 
con.execute('INSERT INTO blah;') 

con.commit() 

while True: 
    result = con.execute('SELECT blah') 
    print(result.fetchone()[0]) 
    time.sleep(1) 
+1

你可能想關閉'fetchone'後面的遊標,''result.close()' –

+0

@JoachimIsaksson恐怕它不起作用 – Hidden

+0

然後CL。的回答可能有幫助,不知道內置的事務管理。 –

回答

0

Python的sqlite3模塊試圖要高明和manages transactions for you

爲確保您可以從其他線程/進程訪問數據庫,請禁用該設置(設置isolation_levelNone),並在需要時使用顯式事務。 或者,每當您完成時請致電con.commit()

+0

在詢問這裏之前,我嘗試了isolation_level「trick」,但它沒有奏效,對不起,我沒有提到它。也正如您在創建數據庫後所提交的代碼中所見,在循環中,我只使用不需要提交的SELECT子句。 – Hidden

+0

只讀事務仍然會讀取鎖定。 –