GQL-запрос с помощью __key__ в списке ключей - PullRequest
5 голосов
/ 29 ноября 2011

В GQL-ссылке рекомендуется использовать ключевое слово IN со списком значений, а для создания ключа вручную GQL-запрос

SELECT * FROM MyModel WHERE __key__ = KEY('MyModel', 'my_model_key')

будетдобиться успеха.Однако при использовании кода, который, как вы ожидаете, сработает:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'),
                                        KEY('MyModel', 'my_model_key2'))

в средстве просмотра хранилища данных, появляется жалоба на «Неверная строка запроса GQL».

Как правильно отформатироватьтакой запрос?

ОБНОВЛЕНИЕ: Это невозможно сделать с текущим SDK.Как я отмечаю в своем комментарии, при использовании списка приемлемыми элементами списка могут быть только ссылки (например, :1 или :email) или int, float, string, boolean или null.

ВТОРОЕ ОБНОВЛЕНИЕ: я исправил ошибку, и теперь можно выполнять такие запросы.Исправление можно найти в Google Code Hosting diff .

PS Я знаю, что есть более эффективные способы сделать это в Python (без создания запроса GQL) и с использованием remote_api,но каждый вызов remote_api считается квотой.В среде, где квота не является (обязательно) бесплатной, очень полезны быстрые и грязные запросы.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Я не понимаю. Ваша цель - просмотреть определенный список объектов в средстве просмотра хранилища данных, чтобы избежать использования квоты? Я не знаю, как это сделать с помощью GQL, но вы можете получить доступ к сущностям напрямую, если знаете их ключ, например ::

https://appengine.google.com/datastore/edit?app_id=myapp&key=key1

https://appengine.google.com/datastore/edit?app_id=myapp&key=key2

Если вы делаете это в коде, пожалуйста, не пытайтесь использовать GQL. Используйте db.get(keys) или что-то подобное.

1 голос
/ 03 апреля 2012

После применения fix будет достаточно фрагмента кода из исходного поста:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'),
                                        KEY('MyModel', 'my_model_key2'))

PS Я понял, что мой комментарий к исходному сообщению может быть недостаточно четким как ответ будущим зрителям.

...