2009-09-12 4 views
3

на Google AppEngine, вы можете получить значение ключа хэша, выполнив запрос какGQL получить ID поля

 
select __key__ from furniture 

Но AppEngine хранилищу поддерживает хорошо autoincremented поле ID для каждого вида.

Как я могу получить к нему доступ из запроса?

 
select ID from furniture 

Не работаю

+2

Идентификатор не «autoincremented». Они гарантированно будут уникальными в рамках одного типа и группы сущностей, но вряд ли они будут непрерывными и не гарантированно увеличиваться. (На сервере разработки они являются последовательными.) – geoffspear

ответ

4

Я считаю, что запрос НКУ не может включать в себя вызовы аксесса методы или атрибут добычи (много в том же ключе, что и то, что можно сделать только "SELECT * FROM" принести целые предприятия или "SELECT __key__ FROM" для извлечения ключей только - он не может выбирать поля, как и в [гипотетическом -!)] "SELECT this, that FROM «)

Итак, вам нужно получить ключи, а затем вызвать каждый ключ .id() аксессора (если вы хотите None для ключей. которые не имеют идентификатор, а скорее имя, используйте .id_or_name(), если вы хотите получить имя, если оно доступно, и None только в крайнем случае). Например, чтобы получить только без None IDs:

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

Абсолютно корректно, за исключением того, что условие должно быть «if 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

его работы отлично сортируются и сладостны, благодаря большому количеству .. –

Смежные вопросы