使用python版本的GAE并从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)
答案 0 :(得分:3)
您的实体没有duration
属性(无法过滤,因为索引无法引用它们),实体duration
设置为无(可以过滤)。
由于您更改了MyModel
架构,因此应该使用以下内容修复存储没有duration
属性的实体:
entities = MyModel.all()
for entity in entities :
if not entity.duration :
entity.duration = None
entity.put()
查看appengine-mapreduce库以完成此长时间运行的任务。
答案 1 :(得分:0)
我认为通常的做法是在模型中添加一个布尔标志字段并对其进行过滤。在你的情况下,这就像是
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
字段。