Ответ 1
Попробуйте следующее:
SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)
Я хочу построить GQL-запрос, чтобы получить объект, используя его числовой идентификатор. Я делаю это в Datastore viewer в консоли управления приложениями, поэтому я не могу использовать Model.get_by_id (numeric_id). Что-то вроде
SELECT * FROM Model WHERE id = <numeric_id>
также не работает.
Попробуйте следующее:
SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)
К сожалению, не существует способа написать запрос, эквивалентный
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.
Еще один способ: сначала получите ключ для объекта, использующего id, с помощью
key = db.Key.from_path('Model', int(id))
то получим объект
obj = db.get(key)
Преимущество состоит в том, что вам не нужно выполнять форматирование строк.
ссылка: заданный набор 3 на этом курсе, https://classroom.udacity.com/courses/cs253/
В моем случае мне пришлось изменить тип ID из String в Long
Я получаю эту ошибку:
Ошибка запроса GQL: Обнаружено... в строке 1, столбец 42. Ожидалось одно из: UNQUOTED_NAME... QUOTED_NAME... "
Оказывается, в консоли администратора разработчика хранилища данных Google AppEngine вы должны отбросить кавычки и использовать что-то вроде этого:
SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)