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

时间:2018-11-07 19:29:27

标签: postgresql python-3.5 peewee postgresql-9.5

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

我正在尝试运行此

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()

当我运行它时,它返回一个空列表。在对打印语句进行了一些调查之后,函数get_text_words收到的对象是<TextField>,而不是字段的文本值。它没有通过if text:语句,因此没有返回空列表。

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

有没有一种方法可以运行这种类型的更新语句,它需要一个字段并将其放入对值进行运算并返回结果以分配给另一个字段的函数?

1 个答案:

答案 0 :(得分:1)

您似乎没有意识到update()方法会导致生成SQL UPDATE查询。您的代码唯一可行的方法是,如果Peewee不知何故反编译了Python并将其翻译成SQL。

您要应用SQL函数,因此在数据库中查找该函数...好像您想要Postgres string_to_array,因为您正试图获取列表?

所以:

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