我是使用Google App Engine开发Web应用程序的新手 .
我想检查数据存储 which have a null value set for a list property ( db.ListProperty
)中的实体 . 但是,当我试图检查任何反对 entity.list
GAE的错误时:
'super' object has no attribute 'list'
.
经过一些搜索后,我在this SO question中看到,为GAE数据存储区实体的列表属性设置空值等同于根本不设置该属性 . 这解释了我的错误 .
所以我需要匹配数据存储区中根本没有设置任何 list
属性的实体 . 查看GAE文档,我仍然没有找到任何允许我检查实体是否具有特定属性集的方法 .
NOTE: 我没有必要用GQL来做这件事 . 我可以用GQL检索所有实体,然后用python检查 . 但是GQL解决方案也没问题 .
3 回答
我可以想到三种解决方法 .
您可能遇到这种情况,因为最初您的模型没有“list”属性,并且您稍后添加了一个属性,因此您可能在数据存储区中没有“list”属性的旧实例 . 您可以编写一个遍历数据存储区的mapreduce函数,并确保所有实体都具有“list”元素 .
否则,您可以使用python hasattr函数
第三,您可以使用异常处理程序来捕获错误情况 .
在GQL中无法做到这一点,GQL只能过滤现有值 . 相反,您应该使用某种形式的计算属性 . NDB支持这些,或者您可以覆盖_pre_put挂钩以将其他属性设置为,例如,列表的长度 . 这将允许您查询此新属性== 0 .
@dragonx所写的内容完全没问题 . 根据我的经验,最好使用try-except语句: