2009-09-12 33 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感谢很多.. –