Что такое необработанный GQL для проверки ReferenceProperty?

У меня есть следующие модели:

class Author(db.Model):
    name = db.StringProperty()

class Story(db.Model):
    author = db.ReferenceProperty(Author)

Что такое необработанный GQL, чтобы найти все истории определенного автора. В обычном SQL я буду использовать соединения, но я не думаю, что это доступно в GQL.

Изменить:

Я ищу сырой способ GQL, я знаю, как это сделать на Pythonic. Например, что-то вроде (следующее, вероятно, совершенно неверно):

"SELECT * FROM Story WHERE author = :1", "Shakespeare"

Я хочу запустить вышеуказанное из данных администратора GAE> Средство просмотра данных> Запросить хранилище данных. Мне нужен необработанный SQL, который кто-то может запустить из типичной оболочки mysql или psql.


person Thierry Lam    schedule 17.02.2010    source источник


Ответы (1)


Edit2: А, необработанный GQL для использования в средстве просмотра данных...
Вот один из способов:

1) Запустите это и получите идентификационный номер:

SELECT * FROM Author where name = 'shakespeare'

2) Используя идентификационный номер из предыдущего запроса, запустите это:

SELECT * FROM Story where author = key('Author', 12345)

Редактировать: наконец-то необработанный GQL:
(самый простой способ: использовать неявное имя свойства обратной ссылки; в форме «modelname_set».)

qry = GqlQuery("SELECT * FROM Author WHERE name = :1", "shakespeare")
shakespeare = qry.get()
shakespeare.story_set # this property now contains all Shakespeare's stories

or

qry0 = GqlQuery("SELECT * FROM Author WHERE name = :1", "shakespeare")
shakespeare = qry0.get()

qry1 = GqlQuery("SELECT * FROM Story WHERE author = :1", shakespeare.key())
shakespeare_stories = qry1.fetch(10) # probably good to have some limit here

Я предпочитаю этот способ:

qry = Author.all()
qry.filter('name = ', 'shakespeare')
shakespeare = qry.get()

shakespeare.story_set # this property now contains all Shakespeare's stories

Иногда может потребоваться более сложный способ:

qry0 = Author.all()
qry0.filter('name = ', 'shakespeare')
shakespeare = qry0.get()

qry1 = Story.all()
qry1.filter('author = ', shakespeare.key())
shakespeare_stories = qry1.fetch(10) # probably good to have some limit here
person mechanical_meat    schedule 17.02.2010
comment
Я ищу сырой способ GQL, я знаю, как это сделать на Pythonic. - person Thierry Lam; 17.02.2010
comment
@Thierry: Действительно, да; см. отредактированный ответ выше. - person mechanical_meat; 17.02.2010
comment
Я запускаю GQL из средства просмотра данных, оно дает вам окно, в котором вы можете выполнять запросы. Я не думаю, что смогу запустить код Python оттуда. - person Thierry Lam; 17.02.2010