Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Funciones
ndb.add_flow_exception(exc)
Especifica que una excepción no se debe registrar, sino que es parte de un flujo de programa normal. (Por lo general, cuando se genera una excepción, se escribe un mensaje de advertencia en los registros de la aplicación).
Argumentos
exc
Indica la clase de excepción que no se debe registrar.
Según la configuración predeterminada, no se registran las siguientes excepciones:
webob.exc.HTTPException (y sus subclases)
ndb.Rollback
ndb.delete_multi(keys, **ctx_options)
Borra entidades identificadas por la secuencia de claves pasada.
El decorador asegura que una función se ejecuta por fuera de una transacción.
Argumentos:
allow_existing
Si es True (el valor predeterminado) y si se llama por código a la función decorada en una transacción, la función se ejecutará de forma independiente de la transacción. Si es False y se llama por código a la función decorada en una transacción, se generará una excepción.
Muestra lo que muestre la devolución de llamada.
Genera lo que genere la devolución de llamada o, en caso de que no se pueda realizar la transacción, una excepción TransactionFailedError.
Para pasar los argumentos a una función de devolución de llamada, usa un lambda. Por ejemplo:
Muestra un objeto Future.
El objeto Future muestra lo que muestre la devolución de llamada, o genera lo mismo que la devolución de llamada, o una excepción TransactionFailedError si no se puede realizar la transacción.
Para pasar los argumentos a una función de devolución de llamada, usa un lambda. Por ejemplo:
Las opciones de contexto te permiten ejecutar operaciones de almacenamiento de datos específicas con distintas configuraciones. Por ejemplo, quizás desees variar la política de lectura o el plazo de RPC de las solicitudes individuales.
Puedes hacerlo si pasas las opciones de contexto a casi cualquier operación.
Algunas funciones relacionadas con las transacciones toman las opciones de transacción, que incluyen las opciones adicionales que se basan en un conjunto de opciones de contexto.
Estos son algunos ejemplos que usan opciones de contexto. Para establecer el plazo de RPC a 1 segundo cuando lee una entidad, puedes usar lo siguiente:
key.get(deadline=1)
Para establecer el tiempo de espera de Memcache a 30 segundos cuando escribe una entidad, puedes usar lo siguiente:
ent.put(ndb_memcache_timeout=30)
Para borrar un elemento que se almacenó en caché y forzar una carga nueva, puedes usar lo siguiente:
key.delete(use_datastore=False)
Los argumentos de palabras clave especiales options y config (que tienen significados idénticos por razones históricas) permiten que se especifiquen varias opciones como un objeto de configuración. Puede ser un objeto ndb.ContextOptions o ndb.TransactionOptions (para las funciones y los decoradores transaccionales).
Por ejemplo, key.get(options=ndb.ContextOptions(use_cache=True)) es equivalente a key.get(use_cache=True).
Las opciones que se establecieron en el objeto de opciones se pueden anular con los parámetros de palabra clave.
Estas opciones de contexto se encuentran disponibles:
Opción
Tipo
Descripción
deadline
float
El plazo de llamada al almacén de datos especificado en segundos.
(Según la configuración predeterminada, solo el plazo del controlador de la solicitud interrumpe la llamada).
read_policy
ndb.EVENTUAL_CONSISTENCY
Establécelo en ndb.EVENTUAL_CONSISTENCY si, en lugar de esperar a que Datastore termine de aplicar los cambios a todos los resultados que se muestran, deseas obtener los resultados de forma más rápida, aunque exista el riesgo de que no estén actualizados.
force_writes
bool
Especifica si una solicitud de escritura debe realizarse de forma correcta incluso si la app es de solo lectura.
(Esto aplica a los períodos de solo lectura controlados por el usuario).
use_cache
bool
Especifica si se deben almacenar las entidades en la caché en proceso. Esto anula la política de caché en proceso de esta operación.
use_memcache
bool
Especifica si se deben almacenar las entidades en Memcache. Esto anula la política de Memcache para esta operación.
use_datastore
bool
Especifica si se deben almacenar las entidades en Datastore. Esto anula la política de Datastore para esta operación.
memcache_timeout
int
Duración máxima de las entidades en Memcache. Esto anula la política de tiempo de espera de Memcache para esta operación.
max_memcache_items
int
Tamaño del lote máximo para la función de procesamiento por lotes automático de los métodos de Contexto de Memcache.
Por ejemplo, con el tamaño predeterminado de max_memcache_items (100), se combinarán hasta 100 operaciones de conjunto de Memcache en una sola operación set_multi.
Para algunas funciones relacionadas con la transacción, están disponibles las siguientes opciones de transacción (junto con las opciones de contexto heredadas que se mencionaron antes):
Opción
Tipo
Descripción
xg
bool
Permite las transacciones entre grupos (XG).
Es False de forma predeterminada.
propagation
int
NDB proporciona asistencia limitada para las transacciones dentro de transacciones, que se conocen como “transacciones anidadas”.
El parámetro de propagación controla lo que ocurre si tu código intenta iniciar una transacción anidada.
La política de propagación para @ndb.transactional se establece de forma predeterminada en ALLOWED.
La política de propagación para ndb.transaction() se establece de forma predeterminada en NESTED.
La política NESTED no es compatible con NDB, por lo que el código generará una excepción BadRequestError. NDB establece un valor predeterminado no compatible para que, en este caso, los programadores estén al tanto de forma explícita de las limitaciones de las transacciones anidadas.
El parámetro de propagación puede ser uno de los siguientes valores:
ndb.TransactionOptions.NESTED
La política de propagación NESTED confirmaría todos los cambios en las transacciones internas y externas cuando la política externa se confirme. Sin embargo, si se genera una excepción en la transacción interna, todos los cambios se rechazarán, pero se permitirá que la transacción externa se recupere y continúe de manera opcional. La política NESTED no es compatible. Si usas esta política, tu código generará una excepción BadRequestError.
ndb.TransactionOptions.MANDATORY
Siempre propaga una transacción existente. Si no existe una transacción, se genera una excepción.
Si una función que usa esta política genera una excepción, quizás no sea seguro detectar la excepción y confirmar la transacción externa. Es probable que la función haya dejado la transacción externa en un estado incorrecto.
ndb.TransactionOptions.ALLOWED
Si existe una transacción, propágala.
Si una función que usa esta política genera una excepción, quizás no sea seguro detectar la excepción y confirmar la transacción externa. Es probable que la función haya dejado la transacción externa en un estado incorrecto.
ndb.TransactionOptions.INDEPENDENT
Siempre usa una transacción nueva que “pone en pausa” cualquier transacción existente.
Una función que usa esta política no debe mostrar ninguna entidad leída en la transacción nueva, ya que las entidades no son consistentes de forma transaccional con la transacción del emisor.
retries
int
Cuántas veces reintentar de forma automática en caso de fallas de transacción.
Cero significa intentar una vez, pero no reintentar.
En algunos casos, se ignoran las opciones debido al almacenamiento en caché.
Por ejemplo, si especificas un plazo de RPC para una operación de lectura que se ejecuta desde la caché en contexto, se ignora el plazo.
Por otro lado, las opciones no reconocidas provocan que se genere un TypeError.
Las operaciones con distintas opciones se agrupan cuando se aplica el procesamiento por lotes automático. Por ejemplo, si usas put_async() a fin de escribir algunas entidades con deadline = 5 y otras sin especificar un plazo, y todas son aptas para el procesamiento por lotes automático, el procesador por lotes automático realizará dos llamadas RPC separadas, una para el grupo de entidades con deadline = 5 y una para el otro grupo, aunque el plazo de RPC predeterminado también es 5.
Esto se aplica incluso cuando la opción especificada es irrelevante para la operación de RPC (por ejemplo, ndb_should_cache).
[[["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\u003eThis page documents the use of legacy bundled services and APIs, which are specifically designed for first-generation runtimes in the App Engine standard environment.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003endb\u003c/code\u003e API provides functions for managing entities, including operations like fetching, deleting, and storing entities, both synchronously and asynchronously.\u003c/p\u003e\n"],["\u003cp\u003eTransactions can be managed through the \u003ccode\u003endb\u003c/code\u003e API, allowing you to run operations in a transactional context, which can be done either directly or using decorators like \u003ccode\u003e@ndb.transactional\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eContext and transaction options are available to configure datastore operations, allowing customization of settings like deadlines, caching behavior, and read policies for individual requests.\u003c/p\u003e\n"],["\u003cp\u003eSpecific exceptions, such as \u003ccode\u003ewebob.exc.HTTPException\u003c/code\u003e and \u003ccode\u003endb.Rollback\u003c/code\u003e, are not logged by default, and users can specify additional exceptions to be excluded from logging via \u003ccode\u003endb.add_flow_exception\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# NDB Functions\n\nFunctions\n---------\n\n| This page describes how to use the legacy bundled services and APIs. This API can only run in first-generation runtimes in the App Engine standard environment. If you are updating to the App Engine Python 3 runtime, refer to the [migration guide](/appengine/migration-center/standard/migrate-to-second-gen/python-differences) to learn about your migration options for legacy bundled services.\n\nndb.add_flow_exception(exc)\n: Specify that an exception should *not* be logged, but is just part of\n normal program flow. (Normally, raising an exception writes a warning\n message to the application's logs.)\n\n **Arguments**\n\n exc\n\n : Exception class that should not be logged. By default, the following exceptions are not logged:\n\n - `webob.exc.HTTPException` (and its subclasses)\n - `ndb.Rollback`\n\nndb.delete_multi(keys, \\*\\*ctx_options)\n\n: Deletes entities identified by the passed sequence of keys. **Arguments**\n\n keys\n : Sequence of [keys](/appengine/docs/legacy/standard/python/ndb/keyclass)\n\n \\*\\*ctx_options\n : [Context options](#context_options)\n\nndb.delete_multi_async(keys, \\*\\*ctx_options)\n\n: Asynchronously deletes entities identified by the passed sequence of keys. **Arguments**\n\n keys\n : Sequence of [keys](/appengine/docs/legacy/standard/python/ndb/keyclass)\n\n \\*\\*ctx_options\n : [Context options](#context_options)\n\n Returns a list of [Future](/appengine/docs/legacy/standard/python/ndb/futureclass)\n objects. Each future's result will be `None`.\n\nndb.get_multi(keys, \\*\\*ctx_options)\n\n: Fetches entities identified by the passed sequence of keys. **Arguments**\n\n keys\n : Sequence of [keys](/appengine/docs/legacy/standard/python/ndb/keyclass)\n\n \\*\\*ctx_options\n : [Context options](#context_options)\n\n Returns a list. Each list item is either a\n [Model](/appengine/docs/legacy/standard/python/ndb/modelclass) instance or `None`\n if the key wasn't found.\n\nndb.get_multi_async(keys, \\*\\*ctx_options)\n\n: Asynchronously fetches entities identified by the passed sequence of keys. **Arguments**\n\n keys\n : Sequence of [keys](/appengine/docs/legacy/standard/python/ndb/keyclass)\n\n \\*\\*ctx_options\n : [Context options](#context_options)\n\n Returns a list of [Future](/appengine/docs/legacy/standard/python/ndb/futureclass)\n objects. Each future's result is a\n [Model](/appengine/docs/legacy/standard/python/ndb/modelclass) instance or `None`\n if the key wasn't found.\n\nndb.in_transaction()\n: Returns a Boolean indicating whether a transaction is currently active.\n\n@ndb.non_transactional \n\n@ndb.non_transactional(allow_existing=True)\n: Decorator to ensure that a function runs *outside* a transaction.\n\n **Arguments:**\n\n allow_existing\n : If `True` (the default) and if the decorated function\n is called by code in a transaction, the function runs independent\n of the transaction. If `False` and if the decorated function\n is called by code in a transaction, it raises an exception.\n\nndb.put_multi(entities, \\*\\*ctx_options)\n: Stores a sequence of [Model](/appengine/docs/legacy/standard/python/ndb/modelclass) instances.\n\n **Arguments**\n\n entities\n : Sequence of [Model](/appengine/docs/legacy/standard/python/ndb/modelclass) instances\n\n \\*\\*ctx_options\n : [Context options](#context_options)\n\n Returns a list with the stored [keys](/appengine/docs/legacy/standard/python/ndb/keyclass).\n\nndb.put_multi_async(entities, \\*\\*ctx_options)\n: Asynchronously stores a sequence of\n [Model](/appengine/docs/legacy/standard/python/ndb/modelclass) instances.\n\n **Arguments**\n\n entities\n : Sequence of [Model](/appengine/docs/legacy/standard/python/ndb/modelclass) instances\n\n \\*\\*ctx_options\n : [Context options](#context_options)\n\n Returns a list of [Future](/appengine/docs/legacy/standard/python/ndb/futureclass)\n objects.\n Each future's result will be a stored [key](/appengine/docs/legacy/standard/python/ndb/keyclass).\n\nndb.transaction(callback, \\*\\*ctx_options)\n\n: Run a callback in a transaction. **Arguments**\n\n callback\n : Function or tasklet to be called\n\n \\*\\*ctx_options\n : [Transaction options](#context_options)\n\n Returns whatever callback returns.\n Raises whatever callback raises or a\n `TransactionFailedError` exception if the transaction fails.\n\n To pass arguments to a callback function, use a lambda. For example, \n\n ```python\n def my_callback(key, inc):\n ...\n\n transaction(lambda: my_callback(Key(...), 1))\n ```\n\nndb.transaction_async(callback, \\*\\*ctx_options)\n\n: Asynchronously run a callback in a transaction. **Arguments**\n\n callback\n : Function or tasklet to be called\n\n \\*\\*ctx_options\n : [Transaction options](#context_options)\n\n Returns a [Future](/appengine/docs/legacy/standard/python/ndb/futureclass).\n The future returns whatever callback returns, or\n raises whatever callback raises or a\n `TransactionFailedError` if the\n transaction fails.\n\n To pass arguments to a callback function, use a lambda. For example, \n\n ```python\n def my_callback(key, inc):\n ...\n\n transaction(lambda: my_callback(Key(...), 1))\n ```\n\n@ndb.transactional \n\n@ndb.transactional(\\*\\*ctx_options)\n\n: Decorator to make a function automatically run in a transaction. **Arguments:**\n\n This decorator can have [transaction options](#context_options).\n\nContext Options, Transaction Options\n------------------------------------\n\nContext options allow you to run specific datastore operations with different\nconfigurations. For example, you might want to vary the read policy\nor the RPC deadline for individual requests.\nYou can do this by passing *context options* to almost any operation.\nSome transaction-related functions take *transaction options*, which include additional options\non top of a set of context options.\n\nHere are a few examples using context options. To set the RPC deadline to 1 second when reading an entity,\nyou can use:\n\n```python\nkey.get(deadline=1)\n```\n\nTo set the memcache timeout to 30 seconds when writing an entity,\nyou can use:\n\n```python\nent.put(ndb_memcache_timeout=30)\n```\n\nTo delete an item that has been cached and force its reload, you can use:\n\n```python\nkey.delete(use_datastore=False)\n```\n\nThe special keyword arguments `options` and `config`\n(which have identical meanings for historical reasons) allow one to specify\nseveral options as a Configuration object. This can be an\n`ndb.ContextOptions` object or\n(for the transactional functions and decorator) an\n`ndb.TransactionOptions` object.\nFor example,\n`key.get(options=ndb.ContextOptions(use_cache=True))`\nis equivalent to\n`key.get(use_cache=True)`.\nThe options set in such an options object can be overridden by\nkeyword parameters.\n\nThe following **context options** are available:\n\nIn some cases, options are ignored because of caching.\nFor example, if you specify an RPC deadline for a read\noperation that is satisfied from the in-context cache,\nthe deadline is ignored.\nOn the other hand,\nunrecognized options cause `TypeError` to be raised.\n\nOperations with different options are grouped together when\nauto-batching applies. For example, if you use `put_async()`\nto write some entities with\n`deadline = 5`\nand some without specifying a deadline, and all are eligible for\nauto-batching, the auto-batcher will make two separate RPC\ncalls---one for the group of entities with\n`deadline = 5`\nand one for the other group---even though the default\nRPC deadline is also 5!\nThis applies even if the option specified is irrelevant to\nthe RPC operation (for example, `ndb_should_cache`)."]]