O Google Code é oferecido em: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
Cada entidade do armazenamento de dados possui uma chave, um identificador exclusivo para a entidade dentre todas as entidades de um aplicativo. Uma chave tem diversos componentes: um caminho que descreve um relacionamento pai-filho entre a entidade e outra entidade, o tipo da entidade e um nome atribuído pelo aplicativo ou um ID numérico atribuído pelo armazenamento de dados à entidade.
Cada entidade é de um tipo específico, um grupo de entidades que pode ser retornado por uma consulta. Diferente das linhas de uma tabela, duas entidades do mesmo tipo não precisam ter as mesmas propriedades, embora um aplicativo possa estabelecer tal restrição em um modelo de dados. A API de armazenamento de dados utiliza o nome da subclasse Model (ou Expando) como nome do tipo.
Por exemplo, esta classe define um modelo para um tipo denominado "Story":
class Story(db.Model): title = db.StringProperty() author = db.StringProperty()
Cada entidade possui um identificador. Um aplicativo pode atribuir seu próprio identificador para uso na chave, fornecendo ao construtor da instância um argumento key_name (um valor str):
s = Story(key_name="xzy123")
Um key_name é armazenado como string Unicode (com os valores de str convertidos em texto ASCII). Um key_name não pode começar com um número nem deve ter o formato __*__ (iniciar e terminar com dois caracteres de sublinhado). Se seu aplicativo utiliza dados enviados pelo usuário como nomes de chave de entidade do armazenamento de dados (como um endereço de e-mail), primeiro o aplicativo deve limpar o valor, por exemplo, colocando como prefixo uma string conhecida, para atender a estes requisitos.
Se não for especificado um key_name, a entidade recebe um ID numérico ao ser armazenada pela primeira vez no armazenamento de dados.
s2 = Story() # s2 does not have a name or an ID. s2.put() # s2 is given an ID by the datastore.
Depois de criada a entidade, seu ID ou nome não pode ser alterado.
Dica: Os nomes e IDs da chave não são valores de propriedade. No entanto, é possível executar um conjunto limitado de consultas em chaves por meio da referência ao nome especial da propriedade __key__. Se todas as entidades tiverem o mesmo tipo e pai, os filtros e as ordens de classificação podem ser aplicados aos nomes ou IDs da chave. Consulte Consultas em chaves
Cada entidade pertence a um grupo de entidade, um conjunto de uma ou mais entidades que podem ser manipuladas em uma única transação. Os relacionamentos de grupo de entidades informam ao Google App Engine que este deve armazenar diversas entidades na mesma parte da rede distribuída. Uma transação configura operações de armazenamento de dados para um grupo de entidades e todas as operações são aplicadas como um grupo ou não são aplicadas, se a transação falhar.
Ao criar uma entidade, o aplicativo pode atribuir outra entidade como o pai da nova entidade, usando o argumento parent no Modelconstrutor. Atribuir um pai a uma nova entidade a coloca no mesmo grupo que a entidade pai.
Uma entidade sem pai é uma entidade raiz. Uma entidade que é pai de outra também pode ter um pai. Uma cadeia de entidades pai desde uma entidade até a raiz é o caminho da entidade, e os membros do caminho são os ancestrais da entidade. O pai de uma entidade é definido quando a entidade é criada e não pode ser alterado posteriormente.
Todas as entidades com uma dada entidade raiz como ancestral estão no mesmo grupo de entidades. Todas as entidades de um grupo são armazenadas no mesmo nó do armazenamento de dados. Uma única transação pode modificar diversas entidades de um único grupo ou adicionar novas entidades ao grupo, tornando o pai da nova entidade uma entidade existente no grupo.
Para obter mais informações sobre as transações, consulte Transações.
Se uma entidade que é ancestral de outra for excluída, a entidade descendente não é excluída. A entidade descendente ainda está acessível utilizando sua chave ou caminho completo.
Você pode criar uma entidade com caminho de ancestral sem antes criar a entidade pai. Para fazê-lo, crie uma chave para o ancestral utilizando um tipo e nome de chave e use-a como pai da nova entidade. Todas as entidades com o mesmo ancestral raiz pertencem ao mesmo grupo de entidades, mesmo que a raiz do caminho não represente uma entidade real.
Dicas de uso de grupos de entidades:
A chave completa de uma entidade, incluindo o caminho, o tipo e o nome ou ID numérico, é exclusiva e específica à entidade. A chave completa é atribuída quando a entidade é criada no armazenamento de dados e nenhuma de suas partes pode ser alterada.
As chaves de duas entidades diferentes podem ter partes semelhantes, contanto que pelo menos uma parte seja diferente. Por exemplo, duas entidades podem ter o mesmo tipo e nome, se tiverem pais diferentes. De um modo semelhante, duas entidades podem ter o mesmo (ou nenhum) pai e nome se forem de tipos diferentes.
Um aplicativo não deve supor que a atribuição dos IDs numéricos será em ordem crescente em relação à ordem de criação de entidades. Geralmente é este o caso, mas não há garantias.