Estoy intentando cargar una entidad por clave utilizando el id. Que el almacén de datos asignó, pero no veo ningún método api para hacerlo (usando NDB). Pensé que sería capaz de hacer una clave a partir de una identificación entera y usar key.get() para cargar la entidad, pero no veo una manera de hacer una clave solo con una identificación. Sospecho que me estoy perdiendo algo obvio aquí. ¿Cómo debo cargar una entidad donde solo conozco su id?motor de aplicación ndb - cómo cargar entidad por clave usando id?
Respuesta
YourModel.get_by_id()
obtiene una instancia de modelo por id.
aquí los documentos:
https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id
no creo que no se puede conseguir una entidad por id sin conocer el tipo, ya instancias de las diferentes clases del modelo pueden tener el mismo id/nombre_tecla
Otro manera: ndb.Key(YourModel, id).get()
.
Los modelos en NDB no definen su tipo de clave como parte del modelo. Esto es ingenioso porque puede tener un tipo de modelo dado al que se puede acceder a través de diferentes tipos de claves y padres, lo que los hace más flexibles. Pero es algo problemático porque no siempre está claro qué representa la clave o de dónde viene.
Así, en los casos en los que sólo hay cada vez uno tipo de clave para un modelo determinado (que es casi cada modelo), me gusta crear un método de clase para generar dicha clave, lo que añade un poco de claridad semántica :
class Book(ndb.Model):
title = ndb.StringProperty()
pages = ndb.IntegerProperty()
@classmethod
def make_key(cls, isbn):
return ndb.Key(cls, isbn)
b = Book.make_key('1234-5678').get()
de que el código añadido no es estrictamente necesario, pero se suma claridad y hace que mis modelos más largo plazo de mantener.
- 1. cómo eliminar la entidad NDB usando ID?
- 2. Proyección NDB de clave de instancia o ID
- 3. Hibernate: obtener entidad por id
- 4. no puede persistir entidad JPA en el motor de aplicación
- 5. aplicación engine ndb Key.get solo devuelve la clave?
- 6. ¿Cómo consulto en GQL usando la clave de entidad
- 7. Cómo consultar la entidad padre de la entidad secundaria en Google App Engine (Python) NDB/Datastore?
- 8. Cómo obtener Id de la última entidad persistente usando JPA
- 9. ¿Cómo obtener ID de clave externa de asociación en Doctrine 2 sin cargar el objeto asociado?
- 10. Google-app-engine NDB
- 11. Comprobando si la entidad existe en el almacén de datos del motor de la aplicación google.
- 12. Generar secuencia numérica única para usar como clave de entidad para el almacén de datos del motor de aplicación
- 13. Yesod: Obtener una entidad de base de datos por ID desde un Int
- 14. Usando una vista con ninguna clave primaria con Entidad
- 15. Cargue el archivo .war en el motor de la aplicación Google (GAE) usando la aplicación
- 16. imprimir el modelo appengine entidad id en la plantilla HTML
- 17. LINQ to SQL: Eliminar entidad (por ID) con una consulta
- 18. Identificador de App Engine. Clave vs Id.
- 19. DbContext ChangeTracker: Id del Agregado Entidad de Auditoría
- 20. Usando enum como id
- 21. ID de entidad nueva en el evento de dominio
- 22. Cómo cargar y almacenar una imagen con el motor de aplicación de google (java)
- 23. GenericJDBCException: no se pudo cargar una entidad
- 24. Id de Entidad recién añadido antes SaveChanges()
- 25. Seleccionar un punto por ID usando Highcharts
- 26. NHibernate evict por id
- 27. ¿Cómo mapear la clave compuesta de entidad en JPA?
- 28. marco Entidad - conseguir entidad por su nombre
- 29. Buscar por ID de clave foránea en admin
- 30. ¿Cómo puedo obtener Id de entidad insertada en Entity framework?
Gracias, eso es exactamente lo que estaba buscando. No estoy seguro de cómo me perdí eso en los documentos. – user605331
Creo que los documentos son incorrectos, no pude hacer que esto funcionara por mi vida, pero luego noté que estaba pasando un str, por lo que convertir el ID largo en un int hizo el truco, aunque los documentos te llevan a cree que puede usar un str, esto no es cierto al menos no en la versión del motor de la aplicación del servidor de la aplicación local dev 1.8.9. Una vez que hice un int (id_str) funcionó bien. – Shaun
@Shaun, no creo que los documentos estén equivocados. si su id es un 'int', entonces tendrá que pasar un' int' y si es un 'str', entonces tiene que ser un' str'. – aschmid00