2011-11-29 12 views
5

En la GQL reference, se anima a utilizar la palabra clave IN con una lista de valores, y para construir una Llave de la mano la consulta GQLGQL de consultas con __key__ en lista de claves

SELECT * FROM MyModel WHERE __key__ = KEY('MyModel', 'my_model_key') 

tendrá éxito. Sin embargo, utilizando el código que se puede esperar para trabajar:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'), 
             KEY('MyModel', 'my_model_key2')) 

en el Visor de almacén de datos, hay una queja de la "cadena de consulta GQL no válida."

¿Cuál es la forma correcta de formatear una consulta?

ACTUALIZACIÓN: Esto no es posible con el SDK actual. Como menciono en mi comentario, cuando se utiliza una lista, solo una referencia (por ejemplo, :1 o :email) o un int, float, string, boolean o literal nulo son entradas de lista aceptables.

SEGUNDA ACTUALIZACIÓN: Corregí el error y ahora es posible realizar tales consultas. La solución se puede encontrar en Google Code Hosting diff.

PD Sé que hay formas más eficientes de hacer esto en Python (sin construir una consulta GQL) y usar el remote_api, pero cada llamada al remote_api cuenta en contra de la cuota. En un entorno donde la cuota no es (necesariamente) gratuita, las consultas rápidas y sucias son muy útiles.

+0

¿De verdad crees que el número de entidades que buscas a mano en la consola va a agregar a una cantidad significativa de cuota consumida si lo hiciste a través de remote_api? –

+0

No. Nuevamente, me pregunto cómo estructurar la consulta correctamente. El segundo fragmento en mi publicación parece que no sería una "cadena de consulta GQL no válida". ¿Es el caso que 'WHERE __key__ IN' no es válido GQL? – bossylobster

+0

Todavía estoy confundido por qué quieres hacer esto. Es una forma particularmente ineficiente de captar entidades. –

Respuesta

1

Después de la fix se implementó, el fragmento de código de la entrada original será suficiente:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'), 
             KEY('MyModel', 'my_model_key2')) 

PS me di cuenta de mi comentario en el post original puede no ser lo suficientemente clara como una respuesta a los futuros espectadores.

2

No entiendo. ¿Su objetivo es ver una lista específica de entidades en el Visor de Datastore para evitar consumir cuota? No sé de una manera de hacer esto con GQL, pero se puede acceder directamente a las entidades si sabe su clave, por ejemplo:

https://appengine.google.com/datastore/edit?app_id=myapp&key=key1

https://appengine.google.com/datastore/edit?app_id=myapp&key=key2

Si usted está haciendo esto en el código , por favor no intente usar GQL. Use db.get(keys) o algo similar.

+0

No tengo problemas con 'db.get' o' MyModel.get_by_key_name' o 'MyModel.get_by_id'. La pregunta fue alimentada por el deseo de saber cómo podría hacerse. Incluso haciendo consultas individuales (como con 'key =' en la cadena de consulta) se puede lograr con 'SELECT * FROM MyModel WHERE __key__ = KEY ('MyModel', 'my_model_key')', como mencioné. – bossylobster

Cuestiones relacionadas