2009-05-12 10 views
5

Say mam następujący model:Zbuduj zapytanie GQL (dla Google App Engine), który ma stan na ReferenceProperty

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) 

I powiedzmy mam obiekt Station przechowywane w var foo.

Jak złożyć zapytanie GQL, które zwraca wszystkie obiekty Schedule z odniesieniem do obiektu Station oznaczonego foo?

To jest mój najlepszy (choć nieprawidłowy) próba utworzenia takiego zapytania:

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

Ponownie foo jest Stacja Przedmiotem

Odpowiedz

10

Nie należy włożeniem użytkownik dane do łańcucha GQL za pomocą podstawienia ciągu znaków. GQL popiera zastąpienie parametru, więc można to zrobić:

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

lub za pomocą interfejsu zapytań:

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

FWIW, nie ma potrzeby umieszczania foo.key() w drugim przypadku. To zadziała: Schedule.all(). Filter ("station =", foo) – mainsocial

+0

Mam to działa tylko z końcówką zaproponowaną przez @mainsocial – Gus

7

Jeszcze łatwiej rzeczą do zrobienia jest, aby zmienić definicję modelu dodając „nazwa_kolekcji” pole do ReferenceProperty:

stacji = db.ReferenceProperty (Station, wymagane = true, cOLLECTION_NAME = "rozkłady")

Następnie można po prostu zrobić:

foo.schedules

gdy chcesz uzyskać harmonogramy wszystkich stacji.