如何在Python中锁定sqlite3数据库?

时间:2012-01-12 00:03:56

标签: python sqlite

有没有办法在Python中显式获取sqlite3数据库的锁?

3 个答案:

答案 0 :(得分: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非查询语句之前隐式提交事务(即任何其他语句)比SELECT或前面提到的那样。

答案 1 :(得分:3)

来自sqlite常见问题解答,"Can multiple applications or multiple instances of the same application access a single database file at the same time?"

  

多个进程可以同时打开同一个数据库。   多个进程可以同时执行SELECT。但是只有   一个进程可以随时对数据库进行更改   然而,时间。

无论您是否使用with connection构造,许多进程都可以读取,只有一个可以在任何给定时间写入数据库。

答案 2 :(得分:1)

我们可以使用多进程命令来锁定DB写入和读取过程。我正在使用以下命令,它的工作正常。                  来自多处理导入锁                  l.Lock()                  l.acquire()                       读/写DB                  l.release()