2010-07-21 10 views
5

Nel mio sistema ho un utente che ha creato un'entità che vorrei recuperare. Sto tentando di farlo utilizzando uno filter perché dovrebbe essere più veloce di una chiamata allo gql method. Tuttavia, il filtro non restituisce risultati e gql funziona.Filtro App Engine e metodi gql

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

C'è qualche ragione per cui il filtro sarebbe tornato un elenco vuoto e la chiamata GQL sarebbe restituire i risultati appropriati?

+3

Per inciso, la differenza di velocità tra l'utilizzo GQL e filtri per creare la query dovrebbe essere estremamente banale rispetto ai il sovraccarico dell'esecuzione effettiva della query. Se gql è più leggibile o più intuitivo per te, resta con esso. –

+3

Per quanto non piaccia GQL, @Drew ha ragione: qualsiasi differenza di prestazioni è banale. –

risposta

12

Quando si utilizza filter(), si è richiesto per avere uno spazio tra il nome del campo e l'operatore. Per ottenere la chiamata filter() al lavoro come previsto, è sufficiente inserire uno spazio prima del segno di uguale:

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

ahhhhhh! questo mi ha fatto impazzire per una notte. I fallimenti silenziosi sono il mio peggior incubo. Ho archiviato un problema 2 anni fa, ma non sembra che gli altri si preoccupino (solo 6 stelle). http://code.google.com/p/googleappengine/issues/detail?id=688 –

+0

Wow. Sei un risparmiatore di vita! –

+1

@Peter Sfortunatamente, non è un bug: il codice originale è una query perfettamente valida per la proprietà con il nome 'created_by =', e qualsiasi modifica potrebbe infrangere questo comportamento (peraltro abbastanza raro). –