获取namespace的所有实体——KindError,同时尝试从数据存储appengine python 2.7中获取



我试图从命名空间中获取所有实体,以便在稍后的步骤中删除它们。Im使用appenginedatastore以及使用python2.7ndb

我有一个简单的查询来获取所有实体:

def get_entities(namespace_id):
return [entity for entity in ndb.Query(namespace=namespace_id).fetch()]

还对其进行了修改,以避免遗留捆绑服务中的dunder种类/实体数据存储统计信息:

def get_entities(namespace_id):
return [entity for entity in ndb.Query(namespace=namespace_id).fetch() if not entity.key.id_or_name.startswith('__')]

当使用数据存储模拟器在本地运行时,效果很好。但我在云中部署时遇到了这个错误:

KindError: No model class found for kind '__Stat_Ns_Kind_IsRootEntity__'. Did you forget to import it?

我发现这篇文章"检索属于特定命名空间的所有实体时返回内部种类",但不是一个明确的答案。

如果您有另一种方法来获取特定命名空间中的所有实体,我们将非常欢迎!!

根据您引用的文档,类名以两个下划线开始和结束。

每个统计信息都可以作为一个实体访问,其种类名称以两个下划线开头和结尾

但是,您的代码正在检查以下划线开头的实体键。你应该检查种类而不是

将代码修改为

return [entity for entity in ndb.Query(namespace=namespace_id).fetch(keys_only=True) if not entity.kind().startswith('__')]

注意:我将您的查询切换为仅获取密钥,因为您只想删除记录

最新更新