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

Postgresql Peewee将字段更新为函数的结果,postgresql,python-3.5,peewee,postgresql-9.5,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(T

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

我正在尝试运行以下命令:

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()
当我运行它时,它返回一个空列表。在对print语句进行一些调查之后,函数get_text_words接收的是peewee对象,而不是字段的文本值。它不会传递if text:语句并作为结果返回空列表

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


有没有一种方法可以运行这种类型的update语句,其中update语句接受一个字段并通过一个函数对该值进行操作,然后返回要分配给另一个字段的结果?

您似乎没有意识到update方法会生成SQL update查询。您的代码工作的唯一方式是,如果Peewee以某种方式对Python进行反编译并将其转换为SQL

您想应用一个SQL函数,所以在数据库中查找该函数……似乎您想要Postgres string_to_数组,因为您试图获取一个列表

因此:


你说得对,我忘了更新函数的作用。谢谢你,科利弗!皮维帮我省去了很多麻烦。
q = Text.update({Text.words: fn.string_to_array(Text.text, ' ')})