Construire une requête GQL (pour Google App Engine) qui a une condition sur ReferenceProperty

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

  •  21-08-2019
  •  | 
  •  

Question

Dire que j'ai le modèle suivant:

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)

Et disons que j'ai un objet de la station stockée dans le var foo.

Comment assembler une requête GQL qui retourne tous les objets annexe avec une référence à l'objet référencé par la station <=>?

Ceci est mon meilleur (bien que incorrect ) tentent de former une telle requête:

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

Encore une fois est une <=> Station Objet

Était-ce utile?

La solution

Vous ne devriez pas être insérer des données utilisateur dans une chaîne GQL en utilisant la substitution de chaîne. GQL prend en charge la substitution de paramètres, de sorte que vous pouvez faire ceci:

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

ou, en utilisant l'interface Query:

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

Autres conseils

Une chose encore plus facile à faire est de changer la définition du modèle en ajoutant le champ « nom_collection » au ReferenceProperty:

  

Station = db.ReferenceProperty (Station, requis = True, COLLECTION_NAME = "horaires")

Ensuite, vous pouvez juste faire:

  

foo.schedules

chaque fois que vous voulez obtenir les horaires de toutes les stations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top