有没有办法在Python中显式获取sqlite3数据库的锁?
答案 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()