Вопрос

Я пытаюсь запросить записи в Google App engine, где IntegerProperty равно нулю (None).Это то, что я безуспешно пытался сделать:

data = db.GqlQuery("SELECT * FROM MyModel WHERE intProp=:1",None)

А также с Запросом:

query = db.Query(MyModel)
query = query.filter('intProp', None) 
data = query.fetch(limit=100)

Будем признательны за любую помощь.

class MyModel(db.Model):
    intProp = db.IntegerProperty()
Это было полезно?

Решение

Ваш код выглядит корректным.У вас действительно есть какие-либо примеры MyModel с помощью intProp из None...?

Редактировать:согласно комментарию OP, это, по-видимому, проблема миграции схемы;он добавил новое свойство и ожидал, что оно появится у существующих объектов (установлено значение None).Изменения схемы в GAE работают не так, согласно документы:

Хранилище данных App Engine не требует, чтобы все объекты имели одинаковый набор свойств.После обновления ваших моделей для добавления новых свойств существующие объекты продолжат существовать без этих свойств.В некоторых ситуациях это нормально, и вам больше не нужно выполнять никакой работы.Когда вы хотели бы вернуться и обновить существующие объекты, чтобы у них также были новые свойства?Одна ситуация это когда вы хотите выполнить запрос на основе новых свойств.В нашем примере с изображениями запросы типа "Самые популярные" или "Наименее популярные" не возвращали бы существующие изображения, поскольку у них (пока) нет свойств рейтинги.Чтобы исправить это, нам нужно обновить существующие объекты в хранилище данных.

Эссе, которое я цитирую, продолжается показом одного из способов сделать это, но это довольно старомодный подход, существовавший до того, как в GAE появились запланированные задачи, удаленные API и cТеперь мы можем сделать это лучше.У вентилятора App Engine появилась совсем недавняя Публикация это показывает общий подход (и ошибку, которую он допустил во время миграции своей собственной схемы, чтобы другие могли избежать этого!), и указывает на удаленный API в качестве ключевого инструмента;он также указывает на модуль (из проекта Rietveld open source core-review project, инициированного Гвидо ван Россумом, автором Python и ключевым участником разработки App Engine), который выполняет задачу аккуратно и должным образом (вам нужно будет немного подправить этот код, чтобы он использовал ваши models & c вместо Rietveld's, конечно).

Другие советы

Мне удалось запросить объекты со значением NULL, используя такой трюк:

ВЫБЕРИТЕ * ИЗ MyModel ГДЕ intProp <0

Естественно, нет никакой гарантии, что такой недокументированный метод будет совместим с будущими версиями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top