2009-09-12 60 views
3

在谷歌AppEngine上,您可以通過查詢像GQL獲得ID字段

 
select __key__ from furniture 

檢索散列鍵值但AppEngine上的數據存儲保持一個很好的自動遞增場ID爲每一種。

如何從查詢訪問它?

 
select ID from furniture 

不工作

+2

的ID是不是「自動增量」。他們保證在單一類型和實體羣體中是唯一的,但他們不可能是連續的,也不能保證會增加。 (在開發服務器上,它們是連續的)。 – geoffspear

回答

4

我相信GCL查詢不能包含調用存取方法或屬性提取(多,在同樣的事實,它只能做"SELECT * FROM"獲取整個實體或"SELECT __key__ FROM"只取鑰匙 - 它不能挑選領域,如[假設! - )] "SELECT this, that FROM「)

所以,你需要獲取密鑰,然後調用每個鍵的.id()訪問(如果您想None鑰匙。沒有ID而是名稱;使用.id_or_name()如果您希望獲得該名稱(如果可用),並且None僅作爲最後的手段)。例如,要得到唯一的非無標識:

thekeys = db.GqlQuery('SELECT __key__ FROM Whatever').fetch(1000) 
theids = [k.id() for k in thekeys if k.id() is not None] 
+1

絕對正確,除了條件應該是「如果k.has_id()」 - 或者省略它並使用「k.id_or_name()」。 –

+0

@尼克,謝謝! 'has_id'沒有記錄在http://code.google.com/appengine/docs/python/datastore/keyclass.html,所以我不願意使用它或建議其他人使用它 - 如果這是一個文檔錯誤,當然,我會很樂意在跟蹤器中打開它並且/或者幫助它適應20%的時間;-)。 –

5

,你也可以嘗試

entity.key().id() 
+0

它的作品完美的分類和甜美sloution感謝很多.. –