В Google App Engine, как вы выбираете объекты, атрибут которых не существует? - PullRequest
2 голосов
/ 05 ноября 2010

Используя версию GAE для Python и расширяя модели из db.Model, как вы выбираете сущности, у которых атрибут равен None или не существует?

#This works
#Fetch 10 entities where duration == 0.0
entities = MyModel.all().filter('duration = ', 0.0).fetch(10)

#This doesn't. How can I do the equivalent?
#Fetch 10 entities where duration == None
entities = MyModel.all().filter('duration = ', None).fetch(10)

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

У вас есть объекты без свойства duration (не могут быть отфильтрованы, так как индекс не может ссылаться на них) и объекты с duration, установленным на Нет (могут быть отфильтрованы).

Поскольку у вас естьизменив схему MyModel, вы должны исправить сущности, хранящиеся без свойства duration, примерно следующим образом:

entities = MyModel.all()
for entity in entities :
  if not entity.duration :
    entity.duration = None
    entity.put()

Взгляните на библиотеку appengine-mapreduce , чтобы выполнить эту долгую работузадача.

0 голосов
/ 05 ноября 2010

Я думаю, что обычный способ сделать это - добавить поле логического флага в вашу модель и отфильтровать его. В вашем случае это будет что-то вроде

class MyModel(db.Model):
    duration = db.FloatProperty()
    has_duration = db.BooleanProperty(default=False)
    # ... etc ...

, где вы можете сделать второй запрос с помощью

entities = MyModel.all().filter('has_duration = ', False).fetch(10) 

Вам придется позаботиться об обновлении поля has_duration при создании / редактировании ваших сущностей.

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