首页 文章

检查Google App Engine数据存储区实体是否具有特定属性

提问于
浏览
3

我是使用Google App Engine开发Web应用程序的新手 .

我想检查数据存储 which have a null value set for a list propertydb.ListProperty )中的实体 . 但是,当我试图检查任何反对 entity.list GAE的错误时:

'super' object has no attribute 'list' .

经过一些搜索后,我在this SO question中看到,为GAE数据存储区实体的列表属性设置空值等同于根本不设置该属性 . 这解释了我的错误 .

所以我需要匹配数据存储区中根本没有设置任何 list 属性的实体 . 查看GAE文档,我仍然没有找到任何允许我检查实体是否具有特定属性集的方法 .

NOTE: 我没有必要用GQL来做这件事 . 我可以用GQL检索所有实体,然后用python检查 . 但是GQL解决方案也没问题 .

3 回答

  • 14

    我可以想到三种解决方法 .

    您可能遇到这种情况,因为最初您的模型没有“list”属性,并且您稍后添加了一个属性,因此您可能在数据存储区中没有“list”属性的旧实例 . 您可以编写一个遍历数据存储区的mapreduce函数,并确保所有实体都具有“list”元素 .

    否则,您可以使用python hasattr函数

    if hasattr(entity, 'list'):
        a = entity.list[0] # or whatever operation you want
    

    第三,您可以使用异常处理程序来捕获错误情况 .

  • 0

    在GQL中无法做到这一点,GQL只能过滤现有值 . 相反,您应该使用某种形式的计算属性 . NDB支持这些,或者您可以覆盖_pre_put挂钩以将其他属性设置为,例如,列表的长度 . 这将允许您查询此新属性== 0 .

  • 2

    @dragonx所写的内容完全没问题 . 根据我的经验,最好使用try-except语句:

    for q in query:
        try:
            q.someattribute
        except AttributeError:
            setattr(q, 'someattribute', True)  # or whatever operation you need
    

相关问题