A classe Key
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Observação: é altamente recomendável a desenvolvedores que criam novos aplicativos usar a biblioteca de cliente NDB, porque ela oferece diversos benefícios em comparação com esta biblioteca de cliente, como armazenamento em cache automático de entidades por meio da API Memcache. Se você estiver usando a antiga biblioteca de cliente DB, leia o
Guia de migração de DB para NDB.
Uma instância da classe Key representa uma chave exclusiva para uma entidade do Datastore.
Key
é fornecido pelo módulo google.appengine.ext.db
.
Introdução
Toda instância de modelo tem uma chave,
de identificação,
que inclui o tipo de entidade
da instância
com um identificador exclusivo. O identificador pode ser uma string de nome de chave, atribuída explicitamente pelo aplicativo no momento da criação da instância, ou um ID numérico de números inteiros, atribuído automaticamente pelo App Engine no momento em que a instância é gravada
(put)
no Datastore. O método
key()
da instância de modelo
retorna o objeto Key
da instância. Se a instância ainda não tiver recebido uma chave, key()
gerará um
NotSavedError
.
Um aplicativo pode recuperar uma instância de modelo para uma determinada Key usando a função get().
Instâncias de chave podem ser valores para propriedades da entidade do Datastore, incluindo propriedades dinâmicas de Expando e membros de ListProperty. O modelo ReferenceProperty oferece recursos para valores da propriedade Key, como desreferenciamento automático.
Construtor
- class Key(encoded=None)
-
Uma chave exclusiva para um objeto do Datastore.
Uma chave pode ser convertida em uma string ao transmitir o objeto Key para
str()
.
A string é "urlsafe". Ela usa apenas caracteres válidos
para uso em URLs. A representação da string da
chave pode ser convertida de volta para um objeto Key ao
transmiti-la para o construtor Key (o
argumento codificado).
Observação: a representação da string de uma chave parece criptografada, mas não é. Ela pode ser convertida de volta para os dados de chave brutos, tanto de tipo quanto de identificador. Se você não quiser expor esses dados aos usuários (e permitir que eles adivinhem facilmente as chaves de outras entidades), criptografe essas sequências ou use outra solução.
- codificado
- O formulário
str
de uma instância Key para converter novamente para Key.
Métodos de classe
A classe Key fornece os seguintes métodos de classe:
- Key.from_path(*path, parent=None, namespace=None)
-
Cria um novo objeto Key a partir de um caminho ancestral (opcional) (em um objeto Key existente) e um ou mais novos componentes de caminho. Cada componente
do caminho consiste em um nome de tipo (kind
) e um identificador (id_or_name
), que é um número ou uma string de caracteres.
Um caminho representa a hierarquia de relacionamentos pai-filho de uma entidade. Cada entidade no caminho é representada pelo tipo da entidade e pelo código numérico ou nome de chave dela. O caminho completo representa a entidade que aparece por último no caminho, com os ancestrais (pais) como entidades precedentes.
Por exemplo, a seguinte chamada cria uma chave para uma entidade do tipo
Address
com ID numérico 9876
, na chave pai User/Boris
:
k = Key.from_path('User', 'Boris', 'Address', 9876)
Uma maneira alternativa de criar a mesma Key é a seguinte:
p1 = Key.from_path('User', 'Boris')
k = Key.from_path('Address', 9876, parent=p1)
Para mais informações sobre caminhos, consulte a página Entidades, propriedades e chaves.
Argumentos
- path
- Uma lista de um ou mais componentes de caminho ancestrais, em que cada componente consiste em um tipo e um identificador:
- Tipo: o tipo de entidade. É representado como uma string ou uma string Unicode.
- Identificador:
o
id
, especificado como uma string ou longo. não pode ser o número 0.
- namespace=None
- O namespace a definir apenas para esta Key. Se você fornecer um namespace aqui, ele substituirá o atual definido em namespace_manager. Se
None
, a API usará o namespace atual de namespace_manager.get_namespace.
- parent=None
- Chave pai opcional. Se não fornecida, o padrão será
None
.
Métodos da instância
As instâncias de Key têm os métodos abaixo:
- app()
-
Retorna o nome do aplicativo que armazenou a entidade de dados.
- has_id_or_name()
-
Retornará True
se a entidade tiver um nome ou um ID numérico.
- id()
-
Retorna um ID numérico da entidade de dados, como um número inteiro, ou None
se a entidade não tiver um ID numérico.
- id_or_name()
-
Retorna o nome ou o ID numérico da entidade de dados, o que estiver presente, ou None
se a entidade não tiver nome nem ID numérico.
- kind()
-
Retorna o tipo da entidade de dados em forma de string.
- name()
-
Retorna o nome da entidade de dados ou None
se a entidade não tiver um nome.
- namespace()
-
Retorna o namespace da entidade de dados. Se a entidade não tiver um namespace atual, este método retornará o namespace atual definido em namespace_manager.
- parent()
-
Retorna a Key da entidade pai da entidade de dados ou None
se a entidade não tiver pai.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-09-04 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-09-04 UTC."],[[["\u003cp\u003eThe Key class represents a unique identifier for a Datastore entity, encompassing its entity kind and a unique identifier which can be either a key name or a numeric ID.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers are encouraged to use the NDB Client Library instead of the older DB Client Library, as NDB offers improved features like automatic entity caching.\u003c/p\u003e\n"],["\u003cp\u003eKey objects can be converted to and from "urlsafe" string representations, although these strings are not encrypted and reveal the underlying key data.\u003c/p\u003e\n"],["\u003cp\u003eThe Key.from_path() class method allows the creation of new Key objects by specifying an optional ancestor path and one or more path components, defining the hierarchy of parent-child relationships.\u003c/p\u003e\n"],["\u003cp\u003eKey instances provide various methods such as kind(), id(), name(), namespace(), and parent() to access information about the data entity associated with that key.\u003c/p\u003e\n"]]],[],null,["# The Key Class\n\n**Note:**\nDevelopers building new applications are **strongly encouraged** to use the\n[NDB Client Library](/appengine/docs/legacy/standard/python/ndb), which has several benefits\ncompared to this client library, such as automatic entity caching via the Memcache\nAPI. If you are currently using the older DB Client Library, read the\n[DB to NDB Migration Guide](/appengine/docs/legacy/standard/python/ndb/db_to_ndb)\n\nAn instance of the Key class represents a unique key for a Datastore entity.\n\n`Key` is provided by the `google.appengine.ext.db` module.\n\nIntroduction\n------------\n\nEvery model instance has an identifying\n*[key](./#Kinds_keys_and_identifiers),*\nwhich includes the instance's\n*[entity kind](/appengine/docs/legacy/standard/python/datastore/entities#Kinds_and_identifiers)*\nalong with a unique *identifier.* The identifier may be either a *key name* string, assigned explicitly by the application when the instance is created, or an integer *numeric ID,* assigned automatically by App Engine when the instance is written\n([put](/appengine/docs/legacy/standard/python/datastore/modelclass#Model_put))\nto the Datastore. The model instance's\n[key()](/appengine/docs/legacy/standard/python/datastore/modelclass#Model_key)\nmethod returns the `Key` object for the instance. If the instance has not yet been assigned a key, `key()` raises a\n[NotSavedError](/appengine/docs/legacy/standard/python/datastore/exceptions#NotSavedError).\n\nAn application can retrieve a model instance for a given Key using the [get()](/appengine/docs/legacy/standard/python/datastore/functions#get) function.\n\nKey instances can be values for Datastore entity properties, including [Expando](/appengine/docs/legacy/standard/python/datastore/expandoclass) dynamic properties and [ListProperty](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#ListProperty) members. The [ReferenceProperty](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#ReferenceProperty) model provides features for Key property values such as automatic dereferencing.\n\nConstructor\n-----------\n\nclass Key(encoded=None)\n\n: A unique key for a Datastore object.\n\n A key can be converted to a string by passing the Key object to\n `str()`.\n The string is \"urlsafe\"---it uses only characters valid\n for use in URLs. The string representation of\n the key can be converted back to a Key object by\n passing it to the Key constructor (the\n encoded argument).\n\n **Note:** The string representation of a key looks\n cryptic, but is not\n encrypted! It can be converted back to the raw key data, both kind and\n identifier. If you don't want to expose this data to your users (and allow\n them to easily guess other entities' keys), then encrypt these strings\n or use something else.\n\n encoded\n : The `str` form of a Key instance to convert back into a Key.\n\nClass Methods\n-------------\n\nThe Key class provides the following class method:\n\nKey.from_path(\\*path, parent=None, namespace=None)\n\n: Builds a new Key object from an (optional) ancestor path (in an existing Key object), and one or more new path components. Each path\n component consists of a Kind name (`kind`) and an identifier (`id_or_name`), which is either a number or a character string.\n\n A path represents the hierarchy of parent-child relationships for an entity. Each entity in the path is represented by the entity's kind, and either its numeric ID or its key name. The full path represents the entity that appears last in the path, with its ancestors (parents) as preceding entities.\n\n For example, the following call creates a Key for an entity of kind\n `Address` with numeric ID `9876`, under the parent key `User/Boris`: \n\n ```\n k = Key.from_path('User', 'Boris', 'Address', 9876)\n ```\n\n An alternative way of creating the same Key is as follows: \n\n ```\n p1 = Key.from_path('User', 'Boris')\n k = Key.from_path('Address', 9876, parent=p1)\n ```\n\n For more information about paths, see the [Entities, Properties, and Keys](/appengine/docs/legacy/standard/python/datastore/entities#Ancestor_paths) page.\n\n Arguments\n\n path\n : A list of one or more ancestor path components, where each component consists of a kind and an identifier:\n\n - kind --- The entity kind, represented as a string or a Unicode string.\n - identifier --- The `id`, specified as a string or long. It cannot be the number 0.\n\n namespace=None\n : The namespace to set for this Key only. If you supply a namespace here, it overrides the current namespace set in the [namespace_manager](/appengine/docs/legacy/standard/python/refdocs/modules/google/appengine/api/namespace_manager/namespace_manager). If `None`, the API uses the current namespace from [namespace_manager.get_namespace](/appengine/docs/legacy/standard/python/refdocs/modules/google/appengine/api/namespace_manager/namespace_manager#get_namespace).\n\n parent=None\n : Optional parent key. If not supplied, defaults to `None`.\n\n### Instance Methods\n\nKey instances have the following methods:\n\napp()\n\n: Returns the name of the application that stored the data entity.\n\nhas_id_or_name()\n\n: Returns `True` if the entity has either a name or a numeric ID.\n\nid()\n\n: Returns the numeric ID of the data entity, as an integer, or `None` if the entity does not have a numeric ID.\n\nid_or_name()\n\n: Returns the name or numeric ID of the data entity, whichever it has, or `None` if the entity has neither a name nor a numeric ID.\n\nkind()\n\n: Returns the kind of the data entity, as a string.\n\nname()\n\n: Returns the name of the data entity, or `None` if the entity does not have a name.\n\nnamespace()\n\n: Returns the namespace of the data entity. If the entity does not have a current namespace, this method returns the current namespace set in the [namespace_manager](/appengine/docs/legacy/standard/python/multitenancy/functions).\n\nparent()\n\n: Returns the Key of the data entity's parent entity, or `None` if the entity has no parent."]]