2017-02-21 31 views
0

我試圖使用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__'] 

我想知道如何刪除這些內置的類名稱,只保留用戶創建的類名稱。

回答

2

這些似乎是real在本地開發服務器/仿真器上創建的實體 - 它們實際上可以在數據存儲查看器中看到。例如,在本地開發服務器上執行數據存儲Generate Stats操作時,會創建__Stat_*

這些實體不存在於項目的實時雲數據存儲中(或者它們存儲在別處)。

隨着應用程序的實體類型的一個簡單的命名規則 - 不與_字符開始 - 你可以得到kinds名單如下:

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

根據kinds使用,另一種選擇 - 更安全恕我直言從編碼前瞻性 - 可能是(消滅所有kinds實體時爲例)要經常檢查對明確的預期列表中的那種名稱:

kinds = [entity.key.id_or_name for entity in query.fetch() 
      if entity.key.id_or_name in known_kinds_list] 
+0

Thx爲解決方案。對於第二種解決方案,在我的場景中,我想創建一個'get_tables'方法,它將返回所有用戶創建的類的名稱。它等同於'pymongo.database.Database'的'collection_names'。如果我有'known_kinds_list',我可能不需要獲取各種名稱。 – daiyue