Подтвердить что ты не робот

Запрос GQL с числовым идентификатором в средстве просмотра хранилища данных

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

SELECT * FROM Model WHERE id = <numeric_id>

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

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 2

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

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), вы можете запрашивать ключи, декодировать их и фильтровать по идентификатору, а затем извлекать соответствующие объекты. Но, конечно, это не работает в Datastore Viewer, поскольку вы можете использовать только GQL.

Ответ 3

Еще один способ: сначала получите ключ для объекта, использующего id, с помощью

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

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

obj = db.get(key)

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

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

Ответ 4

В моем случае мне пришлось изменить тип ID из String в Long

Ответ 5

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

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

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

SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)