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

StackOverflow https://stackoverflow.com/questions/2277739

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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.

Это было полезно?

Решение

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

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

SELECT * FROM Author where name = 'shakespeare'

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

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

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

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

или

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top