municipio mexico localidad jalisco federativa estado entidad clave google-app-engine google-cloud-datastore gql

google-app-engine - mexico - estado 15 municipio 060 localidad 0001



¿Cómo consulto en GQL usando la clave de entidad? (5)

¿Cómo escribo una consulta contra la clave de entidad usando GQL en el Visor de datos de Google App Engine?

En el visor, la primera columna (Id / Nombre) se muestra como name=_1 , en la vista de detalles muestra la clave como

Decoded entity key: Programme: name=_1 Entity key: agtzcG9...................

Esta consulta no funciona:

SELECT * FROM Programme where name = ''_1''


Al consultar por clave, debe hacer coincidir la clave exactamente, incluido el padre y no solo la ID o el nombre. Por supuesto, si el padre es nulo, como en el ejemplo anterior, la ID o el Nombre y el tipo de entidad son suficientes.

Si tiene la clave de entidad ya codificada, puede usarla de la siguiente manera:

SELECT * FROM Programme where __key__ = KEY(''agtzcG9...................'')

Para el simple ejemplo anterior,

SELECT * FROM Programme where __key__ = KEY(''Programme'', ''_1'')

lo hará, pero si su clave tiene un padre, como

Paren: id=123

Entonces la consulta sería

SELECT * FROM Programme where __key__ = KEY(''Paren'', 123, ''Programme'', ''_1'')

Si el padre tiene un padre, debes agregarlo también. Para más detalles, consulte la documentación oficial de GQL .

No parece que haya una manera de seleccionar todo con el mismo ID o nombre independientemente del padre.


No necesita consultar para obtener una entidad por clave en absoluto; simplemente puede buscar la entidad por su clave. En Python, puede hacer esto con MyModel.get_by_key_name(''_1'') . Esto es de 3 a 5 veces más rápido que la sugerencia de Adam de usar una consulta.


Para identificadores numéricos, funciona una forma similar a la consulta por nombre:

SELECT * from Programme where __key__ = KEY(''Programme'', 1234567)

Encontré este formulario especialmente útil en la Consola de administración.


Puede usar la clave de la entidad para recuperarla:

SELECT * FROM Programme where __key__ = KEY(''agtzcG9...................'')

Y, debería poder consultar usando el nombre de manera similar:

SELECT * FROM Programme where __key__ = KEY(Programme, ''_1'')

Tenga en cuenta que esto no es algo que le gustaría hacer en su aplicación de App Engine; como Nick señala en su comentario, es una gran pérdida de tiempo. En realidad, este ejemplo solo sirve para mostrarle cómo consultar por clave en la Consola de administración.


Solo una nota rápida sobre esto: cuando uso cualquier comilla alrededor de cualquiera de los argumentos en KEY, la llamada falla (en la consola de administración aparece el mensaje emergente de error).

Por ejemplo, para el tipo "mytype" con ID / Nombre 12345, esto NO funciona:

SELECT * FROM mytype WHERE __key__ = KEY(''mytype'', ''12345'')

Pero esto hace:

SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)