2010-07-21 8 views
5

Ich habe einen Benutzer in meinem System, der eine Entität erstellt hat, die ich abrufen möchte. Ich versuche, dies mit einem filter zu tun, weil es schneller als ein Anruf an die gql method sein soll. Der Filter liefert jedoch keine Ergebnisse und gql funktioniert.App Engine-Filter im Vergleich zu gql-Methoden

randy_res = Vote.all().filter('created_by=', randy).fetch(limit=10) 
randy_res = Vote.gql('WHERE created_by=:1', randy) 

Gibt es einen Grund, warum die Filter würde eine leere Liste und die gql zurückrufen würde, die richtigen Ergebnisse?

+3

Als beiseite, die Geschwindigkeitsdifferenz zwischen der Verwendung von gql und Filter, um die Abfrage erstellen sollte extrem trivial seinen im Vergleich zu der Aufwand, um die Abfrage tatsächlich auszuführen. Wenn gql für Sie lesbarer oder intuitiver ist, bleiben Sie dabei. –

+3

So sehr ich GQL nicht mag, @Drew hat Recht: Jeder Leistungsunterschied ist trivial. –

Antwort

12

Bei Verwendung von filter() sind Sie erforderlich, um ein Leerzeichen zwischen dem Feldnamen und dem Operator zu haben. Um Ihren filter() Anruf zu arbeiten, wie beabsichtigt, brauchen Sie nur einen Platz vor dem Gleichheitszeichen einzufügen:

randy_res = Vote.all().filter('created_by =', randy).fetch(limit=10) 
+1

ahhhhhh! Das hat mich für eine Nacht verrückt gemacht. Stille Ausfälle sind mein schlimmster Albtraum. Ich habe vor 2 Jahren ein Problem eingereicht, aber es sieht nicht so aus, als ob es jemand anderes interessiert (nur 6 Sterne). http://code.google.com/p/googleappengine/issues/detail?id=688 –

+0

Wow. Du bist ein Lebensretter! –

+1

@Peter Leider ist es kein Fehler: Der ursprüngliche Code ist eine absolut gültige Abfrage für die Eigenschaft mit dem Namen 'created_by =', und jede Änderung würde dieses (zugegebenermaßen ziemlich ungewöhnliche) Verhalten brechen. –

Verwandte Themen