小编San*_*ain的帖子

SQLAlchemy with_for_update 行锁定不起作用?

有一个学生,其type属性为4,属性最小值type可以为1。

在 postgres 中

在会话 1 中,我独占锁定并更新学生表中的一行:

BEGIN;
LOCK TABLE students IN ROW EXCLUSIVE MODE;
SELECT * FROM students WHERE id = 122  FOR UPDATE;
UPDATE students SET type = 1 WHERE id = 122;
END;
Run Code Online (Sandbox Code Playgroud)

在第 2 节中,我同时运行:

UPDATE students SET type = type - 1 WHERE id = 122;
Run Code Online (Sandbox Code Playgroud)

我得到的结果是一个例外,即学生在会话 2 中type不能低于1 ,因为我已经将同一个学生的type值设置为1,并且由于会话处于该学生的独占锁定状态,因此会话 2 必须等待。


在 Flask-SQLAlchemy 中

我尝试使用用户重新创建相同的结果,type默认情况下属性设置为 4。

在第 1 节中:

user = …
Run Code Online (Sandbox Code Playgroud)

python postgresql locking sqlalchemy flask-sqlalchemy

5
推荐指数
1
解决办法
7299
查看次数