Peewee обновить поле до результата функции - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть функция, которая берет одно поле базы данных и изменяет его, чтобы оно могло стать другим полем.

Я пытаюсь запустить это:

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 получает объект peewee <TextField>, а не текстовое значение поля. Он не передает оператор if text: и не возвращает пустой список.

Я знаю, что мог бы выполнять итерации, вычислять и сохранять, но я хотел бы посмотреть, есть ли возможность выполнить его в одном запросе, как описано выше, чтобы он был быстрым. Я уже отключил базу данных (не беспокойтесь, это дубликат производства), поэтому запрос был выполнен, но я не уверен, как работать со значением поля.

Есть ли способ запустить оператор обновления такого типа, где он принимает одно поле и помещает его через функцию, которая воздействует на значение и возвращает результат для присвоения другому полю?

1 Ответ

0 голосов
/ 08 ноября 2018

Похоже, вы не понимаете, что метод update() приводит к генерации запроса SQL UPDATE. Единственный способ, которым ваш код будет работать, - это если Peewee каким-то образом декомпилирует Python и переведет его в SQL.

Вы хотите применить функцию SQL, поэтому ищите эту функцию в своей базе данных ... Похоже, вы хотите Postgres string_to_array, поскольку вы пытаетесь получить список?

Итак:

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