GQL-тест для нулевого IntegerProperty - PullRequest
3 голосов
/ 21 августа 2009

Я пытаюсь запросить записи в движке Google App, где IntegerProperty имеет значение NULL (нет). Вот что я безуспешно пытался:

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()

Ответы [ 2 ]

4 голосов
/ 21 августа 2009

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

Редактировать : согласно комментарию ОП, очевидно, это проблема миграции схемы; он добавил новое свойство и ожидал, что существующие сущности покажут его (значение «Нет»). Это не то, как изменения схемы в GAE работают, для документов :

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

Эссе, которое я цитирую, продолжается, показывая один из способов сделать это, но это довольно старомодный подход, до того, как у GAE были запланированные задачи, удаленный API и т. Мы можем сделать это лучше сейчас. В App Engine Fan есть совсем недавняя публикация , в которой показан общий подход (и ошибка, которую он допустил во время миграции своей собственной схемы, чтобы другие могли ее избежать!), И указывает на удаленный API в качестве ключевого инструмента; он также указывает на модуль (из проекта обзора ядра с открытым исходным кодом Rietveld, инициированный Гвидо ван Россумом, автором Python и ключевым участником разработки App Engine), который выполняет задачу аккуратно и правильно (вам, конечно, нужно немного подправить этот код, чтобы он использовал ваши модели & c вместо моделей Ритвельда).

2 голосов
/ 07 сентября 2009

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

ВЫБРАТЬ * ИЗ MyModel, ГДЕ intProp <0 </p>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...