Выбор на основе __key__ (уникальный идентификатор) в Google Appengine - PullRequest
1 голос
/ 14 сентября 2009

Опять у меня


""" A site message """
class Message( db.Model ) :
  # from/to/ a few other fields
  subject = db.StringProperty()
  body = db.Text()

  sent = db.DateTimeProperty( auto_now_add=True )

Теперь я пытаюсь выбрать сообщение по его ключу. Я сохранил ключ раньше и посадил его в виде HTML. В результате вы получаете ссылку, которая выглядит как

<a href="/readmessage?key=aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw">click to open</a>

Итак, я запускаю этот запрос GQL:

gql = """select * from Message where __key__='aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw'"""

Но это не работает, потому что

BadFilterError: BadFilterError: недопустимый фильтр: значение фильтра __key__ должно быть ключевым; получил aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw (str).

Я тут что-то упускаю, а это как вы помещаете объект в строку запроса GQL ... и не хотите, чтобы анализатор Gql жаловался на то, что это строка? 1017 *

Ответы [ 2 ]

6 голосов
/ 14 сентября 2009

Не связывайтесь с GQL для поиска по ключу - создайте ключевой объект из строки:

k = db.Key('aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw')

и просто db.get(k). Если вы настаиваете на GQL, между прочим, k - подходящим образом созданный экземпляр db.Key, НЕ строкового объекта! -) - также то, что вам нужно заменить в запросе GQL ( :1 или еще что-нибудь).

1 голос
/ 29 ноября 2011

Вы также можете создать запрос вручную, создав " литерал ключа сущности, с ... полным путем типов и имен / идентификаторов ключей ".

SELECT * FROM Message WHERE __key__ = KEY('Message', 'message_key')

Это еще более полезно, если вы используете Datastore Viewer / Explorer и не можете использовать синтаксис Python.

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