La clase Key
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Nota: Se recomienda enfáticamente a los desarrolladores que compilan aplicaciones nuevas que usen la biblioteca cliente de NDB, ya que tiene muchas ventajas en comparación con esta biblioteca cliente, como el almacenamiento en caché automático de entidades mediante la API de Memcache. Si por el momento usas la biblioteca cliente de DB anterior, lee la Guía de migración de DB a NDB.
Una instancia de la clase Key representa una clave única para una entidad de Datastore.
El módulo google.appengine.ext.db
proporciona Key
.
Introducción
Cada instancia del modelo tiene una clave de identificación, que incluye el tipo de entidad de la instancia junto con un identificador único. El identificador puede ser una string de nombre de clave que la aplicación asigna de forma explícita cuando se crea la instancia, o un ID numérico de número entero que App Engine asigna de forma automática cuando se escribe (put) la instancia en Datastore. El método
key()
de la instancia del modelo muestra el objeto Key
de la instancia. key()
genera un
NotSavedError
, si aún no se asignó una clave a la instancia.
Una aplicación puede recuperar una instancia modelo para una cierta clave con la función get().
Las instancias de clave pueden ser valores para las propiedades de entidades de Datastore, incluidas las propiedades dinámicas Expando y los miembros de ListProperty. El modelo ReferenceProperty proporciona características para los valores de las propiedades clave, como la desreferencia automática.
Constructor
- class Key(encoded=None)
-
Una clave única para un objeto de Datastore.
Se puede convertir una clave en una string si pasas el objeto Key a str()
.
La string es "urlsafe" y solo usa caracteres válidos para el uso en las URL. La representación de la string de la clave se puede volver a convertir en un objeto clave si se pasa a la clave del constructor (el argumento codificado).
Nota: La representación de la string de una clave parece encriptada, pero no lo está. Se puede volver a convertir en los datos clave sin procesar, tanto del tipo como del identificador. Si deseas no exponer estos datos a tus usuarios (y permitirles que adivinen con facilidad otras claves de entidades), entonces, encripta estas strings o usa algo más.
- encoded
- El formato
str
de una instancia clave para volver a convertirse en una clave.
Métodos de clase
La clase de clave proporciona estos métodos de clase:
- Key.from_path(*path, parent=None, namespace=None)
-
Compila un objeto Key nuevo desde una ruta de acceso principal (opcional) (en un objeto Key existente) y uno o más componentes nuevos de rutas de acceso. Cada componente de ruta consta de un nombre de categoría (kind
) y un identificador (id_or_name
), que puede ser una string de números o de caracteres.
Una ruta de acceso representa la jerarquía de las relaciones entre superiores y secundarios de una entidad. Cada entidad en la ruta de acceso está representada por el tipo de la entidad y su número de ID o su nombre de clave. La ruta de acceso completa representa a la entidad que aparece última en la ruta con sus principales (superiores) como entidades precedentes.
Por ejemplo, en la siguiente llamada, se crea una clave para una entidad de categoría Address
con ID numérico 9876
, en la clave superior User/Boris
:
k = Key.from_path('User', 'Boris', 'Address', 9876)
Esta es otra forma de crear la misma clave:
p1 = Key.from_path('User', 'Boris')
k = Key.from_path('Address', 9876, parent=p1)
Para obtener más información sobre las rutas de acceso, consulta la página Entidades, propiedades y claves.
Argumentos
- path
- Una lista de uno o más componentes de la ruta de acceso principal, en la cual cada componente consta de una categoría y un identificador:
- Tipo: Es el tipo de entidad, representada como una string o una string de Unicode.
- Identificador: Es el
id
, especificado como una string o long. No puede ser el número 0.
- namespace=None
- Es el espacio de nombres que se debe establecer solo para esta clave. Si suministras un espacio de nombres aquí, este anula el espacio de nombres actual que se estableció en namespace_manager. Si es
None
, la API usa el espacio de nombres actual de namespace_manager.get_namespace.
- parent=None
- Clave superior opcional. Si no se proporciona, el valor predeterminado es
None
.
Métodos de instancia
Las instancias de clave tienen los métodos siguientes:
- app()
-
Muestra el nombre de la aplicación que almacenó la entidad de datos.
- has_id_or_name()
-
Muestra True
si la entidad tiene un nombre o un ID numérico.
- id()
-
Muestra el ID numérico de la entidad de datos, como un número entero, o None
si la entidad no tiene un ID numérico.
- id_or_name()
-
Muestra el nombre o el ID numérico de la entidad de datos, el que tenga, o None
si la entidad no tiene nombre ni ID numérico.
- kind()
-
Muestra el tipo de la entidad de datos, como una string.
- name()
-
Muestra el nombre de la entidad de datos, o None
si la entidad no tiene un nombre.
- namespace()
-
Muestra el espacio de nombres de la entidad de datos. Si la entidad no tiene un espacio de nombres actual, este método muestra el espacio de nombres actual establecido en el namespace_manager.
- parent()
-
Muestra la clave de la entidad principal de la entidad de datos, o None
si la entidad no tiene superior.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-04 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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."]]