GQL-запрос с числовым идентификатором в средстве просмотра хранилища данных - PullRequest
35 голосов
/ 06 октября 2010

Я хочу построить запрос GQL, чтобы получить объект, используя его числовой идентификатор. Я делаю это в средстве просмотра хранилища данных в консоли управления приложениями, поэтому не могу использовать Model.get_by_id (numeric_id). Что-то вроде

SELECT * FROM Model WHERE id = <numeric_id>

тоже не работает.

Ответы [ 5 ]

76 голосов
/ 06 октября 2010

Попробуйте это:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)
5 голосов
/ 04 июля 2014

К сожалению, похоже, нет способа написать запрос, эквивалентный

SELECT * FROM Model WHERE id = <numeric_id>

, который бы выбирал все объекты модели с заданным идентификатором.Если вы в порядке с чем-то эквивалентным

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL

, вы можете использовать что-то вроде

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)

Если у вашей сущности есть родитель, вам нужно указать это как частьключа, например

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>)

Если у самого родителя есть родитель, вам нужно будет указать и его.(Дедушка идет слева от родителя и т. Д.)

Конечно, если вы не ограничены GQL (например, если вы используете Python, Go или Java), вы можете запросить ключи,расшифруйте их и отфильтруйте по идентификатору, затем выберите соответствующие объекты.Но, конечно, это не работает в средстве просмотра хранилища данных, поскольку вы можете использовать только GQL.

3 голосов
/ 19 мая 2016

Другой способ - сначала получить ключ для сущности, используя идентификатор, по номеру

key = db.Key.from_path('Model', int(id))

затем получите объект по

obj = db.get(key)

Преимущество в том, что вам не нужно выполнять форматирование строки.

ссылка: задача 3 на этом курсе, https://classroom.udacity.com/courses/cs253/

1 голос
/ 15 мая 2019

Я получаю эту ошибку:

Ошибка запроса GQL: Обнаружено ... в строке 1, столбец 42. Ожидалось одно из: UNQUOTED_NAME ... QUOTED_NAME ... "

Оказывается, что в консоли администратора разработчика хранилища данных Google AppEngine вы должны отбросить кавычки и использовать что-то вроде этого:

SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
0 голосов
/ 20 мая 2014

В моем случае мне пришлось изменить тип идентификатора с String на Long

...