Qual é o GQL bruto para verificar uma referência?
-
21-09-2019 - |
Pergunta
Eu tenho os seguintes modelos:
class Author(db.Model):
name = db.StringProperty()
class Story(db.Model):
author = db.ReferenceProperty(Author)
Qual é o GQL bruto para encontrar todas as histórias de um certo autor. No SQL regular, usarei junções, mas não acho que esteja disponível no GQL.
Editar:
Estou procurando o caminho GQL bruto, sei como fazer da maneira pitônica. Por exemplo, algo como (o seguinte provavelmente está totalmente errado):
"SELECT * FROM Story WHERE author = :1", "Shakespeare"
Quero executar o exposto a partir do GAE Admin Data> Data Viewer> Consulta o DataStore. Quero o SQL bruto que alguém possa fugir de um shell típico MySQL ou PSQL.
Solução
Edit2: Ah, o Raw-GQL para uso no visualizador de dados ...
Aqui está uma maneira:
1) Execute isso e obtenha o número de identificação:
SELECT * FROM Author where name = 'shakespeare'
2) Usando o número de identificação da consulta anterior, execute isto:
SELECT * FROM Story where author = key('Author', 12345)
EDIT: Finalmente, o GQL bruto:
(Maneira mais fácil: use o nome da propriedade implícita de referência de referência; no formulário "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
ou
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
Eu prefiro assim:
qry = Author.all()
qry.filter('name = ', 'shakespeare')
shakespeare = qry.get()
shakespeare.story_set # this property now contains all Shakespeare's stories
Às vezes, a maneira mais envolvida pode ser necessária:
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