Что такое необработанный GQL для проверки ReferenceProperty?
-
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