我试图从命名空间中获取所有实体,以便在稍后的步骤中删除它们。Im使用appengine
与datastore
以及使用python2.7
的ndb
库
我有一个简单的查询来获取所有实体:
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('__')]
注意:我将您的查询切换为仅获取密钥,因为您只想删除记录