如何在Python中设置SQLite隔离级别?

问题描述 投票:0回答:3

我知道在SQL标准中处理事务时有四种隔离级别:

READ UNCOMMITTED - will allow everything
READ COMMITTED - will not allow dirty reads 
REPEATABLE READ - will not allow dirty, non-repearable reads   
SERIALIZABLE - will not allow dirty, non-repearable, phantom reads

在处理 MySQL 时,我可以这样做:

cursor = db.cursor()
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")

或者,如果我正在处理 Postgresql,我可以这样做:

db.set_isolation_level(3) # corresponds to SERIALIZABLE

所以,我想知道,在处理

SQLite
时我是否可以做类似的事情。

我只看到了以下内容,但我不确定它的含义以及如何设置其他隔离级别(如果它们存在于

SQLite
的上下文中)

db.isolation_level = None
python sqlite transactions isolation-level
3个回答
8
投票

sqlite中有PRAGMA语句。看来你可以这样做:

db.execute("PRAGMA read_uncommitted = true;");

3
投票

扩展马丁的答案......

SQLite中的所有事务都是

SERIALIZABLE
,因为SQLite通过数据库范围的读写锁来控制并发,因此一次只能有一个写入者。

例外情况是,如果您在同一进程中的两个或多个连接之间设置了共享缓存模式并启用了

read_uncommited
编译指示,在这种情况下,这些连接可以在
READ UNCOMMITED
模式下运行(但连接共享缓存之外将照常阻止它们)。


1
投票

根据文档,SQLite 支持 WAL 模式(实际上,

SNAPSHOT
隔离级别)。

请参阅有关 SQLite 中的隔离的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.