Google Code disponible en: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
Cada entidad del almacén de datos contiene una clave, un identificador exclusivo de la entidad en todas las entidades de una aplicación. Una clave se compone de varios elementos: una ruta que describe una relación principal-secundario entre la entidad y otra entidad, el tipo de la entidad, y un nombre asignado a la entidad por la aplicación o una ID numérica asignada por el almacén de datos.
Cada entidad es de un tipo concreto, un grupo de entidades que puede devolver una consulta. A diferencia de lo que sucede con las filas de una tabla, las propiedades de dos entidades del mismo tipo no tienen que ser idénticas, aunque una aplicación pueda establecer tal restricción en un modelo de datos. El API del almacén de datos utiliza el nombre de la subclase Model (o Expando) como nombre del tipo.
Por ejemplo, esta clase define un modelo para un tipo llamado "Story":
class Story(db.Model): title = db.StringProperty() author = db.StringProperty()
Cada entidad dispone de un identificador. Una aplicación puede asignar su propio identificador para su uso en la clave. Para ello, proporciona al constructor de la instancia un argumento key_name (un valor str):
s = Story(key_name="xzy123")
Un argumento key_name se almacena como una cadena de Unicode (con los valores str convertidos a texto ASCII). Los argumentos key_name no deben comenzar por un número y no deben presentar el formato __*__ (un carácter de subrayado al principio y otro al final). Si tu aplicación utiliza datos enviados por el usuario como nombres de claves de entidades del almacén de datos (por ejemplo, una dirección de correo electrónico), la aplicación deberá depurar el valor en primer lugar. Una forma de hacerlo sería, por ejemplo, añadirle una cadena conocida como prefijo que cumpla estos requisitos.
Si no se especifica un argumento key_name, se asigna una ID numérica a la entidad cuando se almacena por primera vez en el almacén de datos.
s2 = Story() # s2 does not have a name or an ID. s2.put() # s2 is given an ID by the datastore.
Una vez creada la entidad, su nombre o ID no se puede modificar.
Sugerencia: las ID y los nombres de Key (clave) no son valores de propiedades. No obstante, puedes realizar un conjunto limitado de consultas en claves haciendo referencia al nombre de propiedad especial __key__. Si todas las entidades tienen el mismo tipo y entidad principal, los filtros y los criterios de clasificación se pueden aplicar a las ID o a los nombres de clave. Para obtener más información, ve a Consultas aplicadas a las claves.
Cada entidad pertenece a un grupo de entidades, un conjunto de una o varias entidades que se pueden manipular en una única transacción. Las relaciones de grupos de entidades indican a App Engine que almacene varias entidades de la misma parte de la red distribuida. Una transacción configura las operaciones de almacén de datos para un grupo de entidades, tras lo cual se aplican todas las operaciones o ninguna de ellas (si se genera un error en la transacción).
Cuando la aplicación crea una entidad, puede asignar otra entidad como la principal de la entidad nueva a través del argumento parent del constructor Model. Al asignar una entidad principal a una entidad nueva, se coloca la entidad nueva en el mismo grupo de entidades que la entidad principal.
Una entidad sin una entidad principal es una entidad raíz. Una entidad que sea la entidad principal de otra puede tener a su vez otra entidad principal. Una cadena de entidades principales de una entidad hasta la raíz es la ruta de la entidad; los miembros de la ruta son los ancestros de la entidad. La entidad principal de una entidad se define cuando se crea la entidad y no se puede modificar posteriormente.
Todas las entidades con una entidad raíz dada como ancestro pertenecen al mismo grupo de entidades. Todas las entidades de un grupo se almacenan en el mismo nodo de almacén de datos. Una única transacción puede modificar varias entidades de un grupo o añadir entidades nuevas al grupo haciendo que la entidad principal de la nueva entidad sea una entidad existente en el grupo.
Para obtener más información sobre las transacciones, consulta Transacciones.
Si se elimina una entidad que es ancestro de otra entidad, la subentidad no se elimina. Se puede seguir accediendo a la subentidad mediante su clave o ruta completa.
Puedes crear una entidad con una ruta de ancestro sin crear previamente la entidad principal. Para ello, crea una clave para el ancestro con un tipo y un nombre de clave y, a continuación, utilízala como elemento principal de la nueva entidad. Todas las entidades con el mismo ancestro raíz pertenecen al mismo grupo de entidades, independientemente de que la raíz de la ruta represente una entidad real.
Sugerencias para utilizar grupos de entidades:
La ruta completa de una entidad, incluidos el nombre o la ID numérica, el tipo y la ruta, es exclusiva y específica de esa entidad. La clave completa se asigna cuando la entidad se crea en el almacén de datos, y no se puede modificar ninguna de sus partes.
Las claves de dos entidades distintas pueden tener partes similares siempre y cuando haya al menos una parte diferente. Por ejemplo, dos entidades pueden tener el mismo nombre y el mismo tipo si tienen entidades principales distintas. Del mismo modo, dos entidades pueden tener la misma entidad principal (o ninguna entidad principal) y el mismo nombre si son de distintos tipos.
Una aplicación no debe confiar en que se asignen ID numéricas en orden ascendente respecto al orden de creación de la entidad. Por lo general, se suele utilizar un orden ascendente, pero no se puede garantizar que siempre sea así.