如何使用 Peewee 进行 CASE SQL 查询?

How to use Peewee to make CASE SQL queries?

我在 postgres 中有一个 table,它为每一行保存一个优先级整数。 每当我添加新行或更改 table.

中所有其他行的现有行的优先级时,优先级都需要更新

在纯 SQL 中执行此操作的一种方法是使用 CASE 查询:

# example of editing priority 5 to 2 and fixing the rest
set Priority = case when Priority = 5 then 2
                    when Priority > 1 then Priority + 1
                    else Priority
               end

问题:如何使用python中的peewee ORM来方便查询?

我在文档中找不到执行此操作的方法。尽管文档提供了一些很好的示例,但我的用例不适合任何一个示例。

您可以使用 peewee.Case(文档:http://docs.peewee-orm.com/en/latest/peewee/api.html#Case)。它有据可查

class Task(Model):
    priority = IntegerField()

q = Task.update(priority=Case(None, (
    (Task.priority == 5, 2),
    (Task.priority > 1, Task.priority + 1)),
    Task.priority)
q.execute()