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



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

我正在尝试运行这个:

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<TextField>对象,而不是字段的文本值。它没有传递if text:语句,并因此返回一个空列表。

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

有没有一种方法可以运行这种类型的更新语句,它获取一个字段,并将其通过一个对值进行操作的函数,然后返回结果以分配给另一个字段?

您似乎没有意识到update()方法会生成SQLUPDATE查询。代码工作的唯一方法是,Peewee以某种方式反编译Python并将其翻译成SQL。

您想要应用SQL函数,所以请在数据库中查找该函数。。。似乎你想要Postgres字符串to_array,因为你正试图获得一个列表?

因此:

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

最新更新