частичные предки извлекаются перед удалением из хранилища данных AppEngine - PullRequest
1 голос
/ 24 ноября 2011

Я хочу удалить несколько объектов из хранилища данных AppEngine в транзакции:

def F():
  items_to_delete = []
  for item in db.Query().ancestor(...):
    if item.aaa ... item.bbb:
      items_to_delete.append(item)
  db.delete(items_to_delete)
db.run_in_transaction(F)

Можно ли получить только несколько полей элементов (aaa и bbb))?Повлияет ли такая выборка на производительность?

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

Невозможно получить только несколько полей;т.е. вы всегда будете получать всю сущность со всеми ее полями (или только ключи сущности).Из справочных документов GQL App Engine :

The GQL syntax can be summarized as follows:   
    SELECT [* | __key__]
        [FROM <kind>]]
        [WHERE <condition> [AND <condition> ...]]
        [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
        [LIMIT [<offset>,]<count>]
        [OFFSET <offset>]

и

Запрос GQL возвращает ноль или более сущностей или ключей запрошенного вида.Каждый GQL-запрос всегда начинается с SELECT * или SELECT __key__.(GQL-запрос не может выполнить SQL-подобный запрос «соединения».) Совет: SELECT __key__ запросы выполняются быстрее и обходятся дешевле ЦП, чем SELECT * запросы.

0 голосов
/ 25 ноября 2011

Ознакомьтесь с Учебником NDB , написанным самим Гвидо ( поклонитесь земле и скажите «Я не достоин» x 3 :). Он использует AND ИЛИ в запросе и выбирает несколько полей со смещением (что отвечает на ваш вопрос). Тем не менее, экспериментальный, поэтому используйте с осторожностью, пока он не выйдет из предварительного просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...