如何使用种类查询删除Google数据存储区中的内置种类名称

时间:2017-02-21 22:55:21

标签: python-3.x google-app-engine google-cloud-datastore

我正在尝试使用google cloud datastore种类查询来获取Kind queries中演示的种类名称列表,

query = client.query(kind='__kind__')
query.keys_only()

kinds = [entity.key.id_or_name for entity in query.fetch()]

但代码会生成一些内置的类名,例如

['_AE_DatastoreAdmin_Operation', '_GAE_MR_TaskPayload',
 '__Stat_Kind_IsRootEntity__', '__Stat_Kind_NotRootEntity__',
 '__Stat_Kind__', '__Stat_PropertyName_Kind__', 
 '__Stat_PropertyType_Kind__', '__Stat_PropertyType_PropertyName_Kind__',
 '__Stat_PropertyType__', '__Stat_Total__'] 

我想知道如何删除这些内置类名称并仅保留用户创建的类名称。

1 个答案:

答案 0 :(得分:2)

这些似乎是在本地开发服务器/模拟器上创建的真实实体 - 实际上可以在数据存储查看器中看到它们。例如,在本地开发服务器上执行数据存储__Stat_*操作时,会创建Generate Stats个。

项目的实时云数据存储中不存在这些实体(或者它们存储在其他地方)。

使用应用程序实体种类的简单命名规则 - 不以_字符开头 - 您可以获得kinds列表,如下所示:

kinds = [entity.key.id_or_name for entity in query.fetch()
             if not entity.key.id_or_name.startswith('_')]

取决于kinds使用,另一个选项 - 从编码角度来看更安全的恕我直言 - 可能总是根据明确的预期列表检查类型名称(例如,擦除所有{ {1}}实体):

kinds