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>)