我正在尝试用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终端中,这是不可能的。但它在这里。为什么
根据您的操作方式,它可能与Autocommit有关。当autocommit打开时,您发出SELECT FOR UPDATE,它会立即提交并释放锁,因此您必须先开始执行SELECT FOR UPDATE,然后在另一个会话中测试它时,在提交之前暂停
相关问题 更多 >
编程相关推荐