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, ' ')})
我有一个函数,它接受一个数据库字段并对其进行修改,使其成为另一个字段。
我正在尝试 运行 这个:
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, ' ')})