AppEngine:Запросить хранилище данных для записей со значением <отсутствует>
-
11-09-2019 - |
Вопрос
Я создал новое свойство для своей модели базы данных в хранилище данных Google App Engine.
Старый:
class Logo(db.Model):
name = db.StringProperty()
image = db.BlobProperty()
Новый:
class Logo(db.Model):
name = db.StringProperty()
image = db.BlobProperty()
is_approved = db.BooleanProperty(default=False)
Как запросить записи логотипа, для которых не установлено значение is_approved?Я пытался
logos.filter("is_approved = ", None)
но это не сработало.В средстве просмотра данных новые значения полей отображаются как .
Решение
Согласно документации App Engine на Запросы и индексы, существует различие между сущностями, имеющими нет стоимость недвижимости, а также те, которые имеют нулевой ценность для него;и «Сущности без фильтрованного имущества никогда не возвращаются запросом». Таким образом, невозможно написать запрос для этих старых записей.
Полезная статья есть Обновление схемы вашей модели, в котором говорится, что единственный поддерживаемый в настоящее время способ найти объекты, у которых отсутствуют некоторые свойства, — это изучить их все.В статье приведен пример кода, показывающий, как циклически перемещаться по большому набору сущностей и обновлять их.
Другие советы
Возможно, это изменилось, но я могу фильтровать записи по нулевой поля.
Когда я пробую запрос GQL SELECT * FROM Contact WHERE demo=NULL
, он возвращает только записи, для которых отсутствует демонстрационное поле.
Согласно документу http://code.google.com/appengine/docs/python/datastore/gqlreference.html:
Правая сторона сравнения может быть одной из следующих (в зависимости от типа данных свойства):...] логический буквальный, как истинный или ложь;тот НУЛЕВОЙ буквальный, который представляет нулевое значение (нет в Python).
Я не уверен, что "нулевой" такой же как "отсутствующий" хотя :в моем случае эти поля уже существовали в моей модели, но не были заполнены при создании.Может быть, Федерико, вы могли бы сообщить нам, работает ли запрос NULL в вашем конкретном случае?