2013-03-07 74 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