2010-07-21 13 views
5

Tengo un usuario en mi sistema que ha creado una entidad que me gustaría recuperar. Estoy intentando hacer esto usando un filter porque se supone que es más rápido que una llamada al gql method. Sin embargo, el filtro no devuelve resultados y funciona gql.El filtro de App Engine frente a los métodos gql

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

¿Hay alguna razón por la cual el filtropodría devolver una lista vacía y la llamada gql devolvería los resultados apropiados?

+3

Como acotación al margen, la diferencia de velocidad entre el uso de gql y filtros para construir la consulta debe ser extremadamente trivial comparado con la sobrecarga de realmente ejecutar la consulta. Si gql es más legible o más intuitivo para usted, quédese con él. –

+3

Por mucho que no me guste GQL, @Drew tiene razón: cualquier diferencia de rendimiento es trivial. –

Respuesta

12

Al usar filter(), usted es requiere para tener un espacio entre el nombre del campo y el operador. Para obtener su llamada filter() que funciona como es debido, sólo tiene que insertar un espacio antes del signo igual:

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

ahhhhhh! esto me hizo enloquecer por una noche. Los fracasos silenciosos son mi peor pesadilla. Archivé un problema hace 2 años, pero no parece que a nadie le importen (solo 6 estrellas). http://code.google.com/p/googleappengine/issues/detail?id=688 –

+0

Wow. Eres un salvavidas! –

+1

@Peter Lamentablemente, no es un error: el código original es una consulta perfectamente válida para la propiedad con el nombre 'created_by =', y cualquier cambio rompería este comportamiento (ciertamente bastante poco común). –