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, ' ')})