Construir uma consulta GQL (para o Google App Engine) que tem uma condição em ReferenceProperty

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Say Eu tenho o seguinte modelo:

class Schedule(db.Model):
    tripCode = db.StringProperty(required=True)
    station = db.ReferenceProperty(Station, required=True)    
    arrivalTime = db.TimeProperty(required=True)
    departureTime = db.TimeProperty(required=True)

E digamos que eu tenho um objeto Estação armazenada no var foo.

Como faço para montar uma consulta GQL que retorna todos Horário objetos com uma referência ao objeto Estação referenciado por foo?

Este é o meu melhor (embora incorreta ) tentar formar tal consulta:

myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())

Mais uma vez foo é um Estação objeto

Foi útil?

Solução

Você não deve ser inserir os dados do usuário em uma seqüência GQL usando substituição string. GQL suporta substituição de parâmetros, de modo que você pode fazer isso:

db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key())

ou, usando a interface de consulta:

Schedule.all().filter("station =", foo.key())

Outras dicas

Uma coisa ainda mais fácil de fazer é mudar a definição do modelo adicionando o campo 'collection_name' ao ReferenceProperty:

estação = db.ReferenceProperty (Station, exigido = True, collection_name = "horários")

Em seguida, você pode apenas fazer:

foo.schedules

sempre que você deseja obter horários todas as estações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top