无法应用隔离

2024-10-05 22:40:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用psycopg实现事务

这是我要实现的SQL:

BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM students WHERE matnr = 123457 FOR UPDATE;

UPDATE studierende
SET name = 'Name' WHERE matnr = 123457;
COMMIT;

但当我联系上

    self.dbConnect = pg.connect(host=db_host, 
database=db_database, user=db_user, password=db_password)

设置隔离等级

self.dbConnect.set_isolation_level(3);

并用.execute("SELECT...FOR UPDATE", data)执行SQL

该行应被锁定以供其他人选择。 但是,尽管我设置了隔离级别,我仍然可以执行甚至更新来自另一个并行查询的行(在第一个用户提交更改之前,它应该处于锁定状态)

在psql终端中,这是不可能的。但它在这里。为什么


Tags: selfhostfordbsqlupdatepasswordwhere
1条回答
网友
1楼 · 发布于 2024-10-05 22:40:53

根据您的操作方式,它可能与Autocommit有关。当autocommit打开时,您发出SELECT FOR UPDATE,它会立即提交并释放锁,因此您必须先开始执行SELECT FOR UPDATE,然后在另一个会话中测试它时,在提交之前暂停

相关问题 更多 >