AppEngine: запрашивает хранилище данных для записей со значением <missing> - PullRequest
23 голосов
/ 28 февраля 2009

Я создал новое свойство для моей модели БД в хранилище данных 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)

но это не сработало. В окне просмотра данных новые значения поля отображаются как.

Ответы [ 2 ]

35 голосов
/ 01 марта 2009

Согласно документации App Engine по Запросы и индексы , существует различие между сущностями, которые имеют нет значения для свойства, и сущностями, которые имеют ноль значение для него; и «Объекты без отфильтрованного свойства никогда не возвращаются по запросу». Поэтому невозможно написать запрос для этих старых записей.

Полезной статьей является Обновление схемы вашей модели , в которой говорится, что единственный поддерживаемый в настоящее время способ найти объекты, у которых отсутствует какое-либо свойство, - это изучить все из них. В статье есть пример кода, показывающий, как циклически проходить через большой набор сущностей и обновлять их.

1 голос
/ 22 декабря 2011

Возможно, это изменилось, но я могу отфильтровать записи по полям null .

Когда я пытаюсь выполнить запрос GQL SELECT * FROM Contact WHERE demo=NULL, он возвращает только записи, для которых отсутствует демонстрационное поле.

Согласно документу http://code.google.com/appengine/docs/python/datastore/gqlreference.html:

Правая часть сравнения может быть одной из следующих (как соответствует типу данных свойства): [...] логический литерал, как ИСТИНА или ЛОЖНЫЙ; литерал NULL , который представляет нулевое значение (нет в Python).

Я не уверен, что "ноль" совпадает с "отсутствует" , хотя: в моем случае эти поля уже существовали в моей модели, но не были заполнены при создании , Может быть, Федерико, вы могли бы сообщить нам, работает ли NULL-запрос в вашем конкретном случае?

...