如何使用Python设置SQLite隔离级别

如何使用Python设置SQLite隔离级别,python,sqlite,transactions,Python,Sqlite,Transactions,我知道(或者至少,我认为我知道),在处理事务时,标准中有四个隔离级别: 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 rea

我知道(或者至少,我认为我知道),在处理事务时,标准中有四个隔离级别:

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")
db.set_isolation_level(3) # corresponds to SERIALIZABLE
或者,如果我在与Postgre打交道,我可以这样做:

cursor = db.cursor()
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
db.set_isolation_level(3) # corresponds to SERIALIZABLE
所以,我想知道,在处理
SQLite
时,我是否可以做类似的事情。我只看到:

db.isolation_level = None
但我不确定这意味着什么以及如何设置其他隔离级别(如果它们存在于
SQLite
的上下文中)。谢谢

在sqlite中有很多。看来你可以做到这一点:

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

要扩展马丁的答案

SQLite中的所有事务都是可序列化的,因为SQLite通过数据库范围的读写锁控制并发性,因此一次只能有一个写入程序


例外情况是,如果您已在同一进程中的两个或多个连接之间设置并启用,在这种情况下,这些连接可以在
READ uncommitted
模式下运行(但共享缓存之外的连接将一如既往地阻止它们)。

谢谢您,先生!我只想澄清一件小事——sqlite支持所有隔离级别吗?那么,您的示例是否适用于
read_committed
repeatable read
serializable
?@Jacobian SQLite中的所有事务都是
serializable
,除非它们使用共享缓存,并且按照Martin的说明将
read_uncommitted
设置为true。谢谢您,先生!但我还是没有得到一件小事。这是否意味着为了使用Python在SQLite中实现真正可序列化的事务,我不必做任何事情,比如
db.isolation\u level=None
db.execute(“PRAGMA read_uncommitted=true;”)
?简单的
游标。执行(“开始”)
游标。执行(命令1)
游标。执行(“命令2”)
游标。执行(“提交”)
就够了吗?