2012-01-12 104 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()