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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top