Peewee行级别阻塞

时间:2018-10-11 17:19:07

标签: mysql locking peewee

我目前在项目中使用Peewee作为ORM。在当前情况下,我有一些进程每个都有数据库连接。所有这些过程都需要同时访问某些表。我正在寻找某种方法使他们不使用中央控制器进行协调。为此,当进程读取一行时,它必须被锁定并且其他进程无法读取该行。被阻止的进程应继续其他未阻止的行。

我四处搜索,发现MySql已经具有内部锁定机制,描述为here,而且显然必须在索引列上使用它才能达到预期的效果(from here) 。但我在peewee文件中找不到任何相关内容。有提供这些功能的扩展程序吗?还是应该编写包含FOR Update子句的原始SQL查询?

1 个答案:

答案 0 :(得分:1)

Peewee支持使用FOR UPDATE子句,我认为这可能是您想要的。它不会阻止其他客户端读取,但是只要持有该锁的事务处于打开状态,它就会阻止修改。

例如:

with db.atomic():
    # lock note.
    note = Note.select().where(Note.id == 123).for_update().get()
    # As long as lock is held no other client can modify note.