update programacion google array google-app-engine gql

google-app-engine - programacion - google datastore get



Consulta GQL con id. Numérico en el visor del almacén de datos (4)

Quiero construir una consulta GQL para obtener un objeto usando su ID numérico. Estoy haciendo esto en el visor de Datastore en la consola de administración de aplicaciones, por lo que no puedo usar Model.get_by_id (numeric_id). Algo como

SELECT * FROM Model WHERE id = <numeric_id>

tampoco funciona


En mi caso, tuve que cambiar el tipo de ID de Cadena a Largo


Lamentablemente, no parece haber una manera de escribir una consulta equivalente a

SELECT * FROM Model WHERE id = <numeric_id>

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

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

puedes usar algo como

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

Sin embargo, si su entidad tiene un padre, deberá especificarlo como parte de la clave, como

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

Si el padre tiene un padre, 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 estuviera 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.


Otra forma es, primero, obtener la clave para la entidad que usa la identificación por

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

luego obtén el objeto

obj = db.get(key)

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

referencia: problema establecido 3 en este curso, https://classroom.udacity.com/courses/cs253/


Prueba esto:

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