2010-10-06 11 views

Respuesta

73

Prueba esto:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 
+0

Gracias, funciona! –

+4

GQL! Como no te puede gustar./ironía – Nilzor

+0

Hace una coincidencia completa en la clave en lugar de solo la parte ID de la clave. Me gustaría obtener todas las entidades con el ID numérico dado, no solo el que no tiene padre. – aij

0

En mi caso he tenido que cambiar el tipo de ID de String a largo

5

Por desgracia, no parece ser una manera de escribir una consulta equivalente a

SELECT * FROM Model WHERE id = <numeric_id> 

que seleccionará todas las entidades de modelo con la identificación proporcionada. Si estás bien con algo equivalente a

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL 

se puede usar algo como

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 

Si su entidad tiene un padre, sin embargo, tendrá que especificar que, como parte de la clave, como

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>) 

Si el elemento primario tiene un elemento primario, deberá especificarlo también. (El abuelo va a la izquierda del padre, y así sucesivamente)

Por supuesto, si no está restringido a GQL (como si está usando Python, Go o Java), puede consultar las claves, decodificarlas y filtrar por id, luego buscar las entidades correspondientes. Pero, por supuesto, eso no funciona en el Datastore Viewer ya que solo puedes usar GQL.

3

Otro revés, es decir, obtener primero la clave de la entidad utilizando el ID de

key = db.Key.from_path('Model', int(id)) 

a continuación, obtener el objeto

obj = db.get(key) 

La ventaja es, usted no tiene que hacer ningún formato de cadena

referencia: problemas nº 3 en este supuesto, https://classroom.udacity.com/courses/cs253/

+0

Debería eliminar el '.' después de 'from_path' que es un error de sintaxis. Aunque funciona de otra manera – xerotolerant

Cuestiones relacionadas