2013-03-07 68 views
0

我正在創建一個使用Sqlite數據庫存儲信息的多線程應用程序。Sqlite數據庫多線程SELECT和UPDATE操作混淆

之一的線程的執行的選擇操作,其中它選擇行,其中一個特定列是空白的,如下所示:

for i in cursor.execute('SELECT Beeid from SongLink WHERE Dlink=\'\''): 

其他線程還訪問數據庫和設法改變的所述的Dlink值列。

將上面的代碼總是給列,其中的Dlink = \「\」」照顧被其他線程作出或更新的,這可能導致錯誤的行選擇

+0

出於好奇,爲什麼要在'''''會做'時查詢'\'\',爲什麼不使用'NULL'? – 2013-03-07 16:17:07

+0

這只是一個古老的習慣,以逃避各種報價,但謝謝指出。 – SteveIrwin 2013-03-07 16:20:28

回答

1

使用separate connections per thread和SQLite會保持數據完整性。

在一個連接中更改數據庫不會在其他線程中可見,除非您a)提交更改並b)在希望查看新數據的連接中啓動新事務。

您確實想要將連接的check_same_thread參數設置爲True

+0

Thanks.However說我在改變Dlink值的第二個線程中提交更改。然後,第一個線程的Select命令也可能顯示沒有Dlink爲「」的值。請指教。 – SteveIrwin 2013-03-07 16:10:38

+1

@SteveIrwin:直到你開始一個新的交易,它不會。數據庫將永遠不會返回與您的查詢不匹配的值。 – 2013-03-07 16:15:26