Peewee 将字段更新为函数的结果

Peewee update a field to the result of a function

我有一个函数,它接受一个数据库字段并对其进行修改,使其成为另一个字段。

我正在尝试 运行 这个:

def get_text_words(text):
    if not text:
        return []
    else:
        # Return a list of words that make up text
        return text.split(' ')

q = Text.update(Text.words = get_text_words(Text.text))
q.execute()

当我运行它时,它returns一个空列表。在使用 print 语句进行一些调查后,函数 get_text_words 正在接收一个 peewee <TextField> 对象而不是字段的文本值。它没有传递 if text: 语句并因此返回一个空列表。

我知道我可以迭代、计算和保存,但我想看看是否有可能像上面那样在一个查询中 运行ning 它,所以它很快。我已经清空了数据库(不用担心,它是生产的副本),所以查询 运行,只是不确定如何对字段的值进行操作。

有没有办法 运行 那种类型的更新语句,它接受一个字段并通过一个对值进行操作的函数和 returns 将结果分配给另一个字段?

您似乎没有意识到 update() 方法会导致生成 SQL UPDATE 查询。如果 Peewee 以某种方式反编译 Python 并将其翻译成 SQL.

,那么您的代码唯一可行的方法就是

您想应用一个 SQL 函数,所以在您的数据库中查找该函数...似乎您想要 Postgres string_to_array 因为您正在尝试获取列表?

所以:

q = Text.update({Text.words: fn.string_to_array(Text.text, ' ')})