2010-07-21 13 views
5

Mam użytkownika w moim systemie, który utworzył encję, którą chciałbym odzyskać. Próbuję to zrobić przy użyciu filter, ponieważ powinien być szybszy niż połączenie z numerem gql method. Jednak filtr nie zwraca wyników i działa gql.Filtr App Engine vs. metody gql

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

Czy jest jakiś powód, dla którego filtr wróci pustą listę i wywołanie gql wróci odpowiednie wyniki?

+3

Tak na marginesie, różnica prędkości pomiędzy użyciem gql i filtrów budować zapytania powinny być bardzo trywialne w porównaniu do obciążenie związane z faktycznym wykonywaniem zapytania. Jeśli gql jest bardziej czytelny lub bardziej intuicyjny, trzymaj się go. –

+3

Tak jak nie lubię GQL, @Drew ma rację: jakakolwiek różnica w wydajności jest banalna. –

Odpowiedz

12

Podczas korzystania z filter(), musisz wymagane, aby mieć spację między nazwą pola i operatora. Aby otrzymać zaproszenie filter() do pracy zgodnie z przeznaczeniem, wystarczy wstawić spację przed znakiem równości:

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

ahhhhhh! to spowodowało, że oszalałem na noc. Ciche niepowodzenia to mój najgorszy koszmar. Zgłosiłem problem 2 lata temu, ale nie wygląda to na to, że ktokolwiek inny (tylko 6 gwiazdek). http://code.google.com/p/googleappengine/issues/detail?id=688 –

+0

Wow. Jesteś ratownikiem! –

+1

@Peter Niestety, nie jest to błąd: oryginalny kod jest całkowicie poprawnym zapytaniem o właściwość o nazwie 'created_by =', a każda zmiana złamie to (wprawdzie dość nieczęste) zachowanie. –