无法检测sqlite中的锁

时间:2018-04-22 04:58:41

标签: python-2.7 sqlite

我通过Python sqlite3模块在python中使用SQLite。我在共享数据库上进行多处理,但不是多线程。

阅读sqlite3的文档,似乎应该通过Connection.isolation_level()来控制锁定。

然而,当我打开两个不同的python交互过程并执行语句(如下)时,我得到了相同的结果。这两个进程显然都是独占锁定的数据库。

哪些序列的Python语句会导致一个进程拥有锁,而另一个进程知道它已被拒绝?锁定进程如何知道它被锁定了? sqlite3会引发错误还是从Connection.isolation_level()返回错误?

$ python
Python 2.7.13 (default, Mar 31 2017, 11:27:49) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> conn = sqlite3.connect('data/precinctTracker.db')
>>> conn
<sqlite3.Connection object at 0x1011a53d0>
>>> conn.isolation_level ='EXCLUSIVE'
>>> conn.isolation_level 
'EXCLUSIVE'
>>> 

1 个答案:

答案 0 :(得分:0)

isolation_level属性控制transaction behaviour,这对您的应用程序没有太大影响。

只有在实际访问数据库文件时,连接才会锁定。因此,要测试锁定,您必须执行一些SQL命令来读取或写入内容。

如果连接无法获取锁定,则会出现“数据库已锁定”错误。 大多数交易都很短(如果您忘记拨打commit()),那么您可以通过设置busy timeout来阻止此操作。

相关问题