Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Funções
ndb.add_flow_exception(exc)
Especifique que uma exceção não deve ser registrada, apenas fazer parte do
fluxo normal do programa. Em geral, criar uma exceção grava uma mensagem de aviso nos registros do aplicativo.
Argumentos
exc
Classe de exceção que não é registrada.
Por padrão, as seguintes exceções não são registradas:
webob.exc.HTTPException (e as subclasses)
ndb.Rollback
ndb.delete_multi(keys, **ctx_options)
Exclui entidades identificadas pela sequência de "keys" aprovada.
Decorador para garantir que uma função seja executada fora de uma transação.
Argumentos:
allow_existing
Se True (o padrão) e se a função decorada for chamada por código em uma transação, a função será executada independentemente da transação. Se False e se a função decorada for chamada por código em uma transação, ela gerará uma exceção.
As opções de contexto permitem executar determinadas operações de armazenamento de dados com diferentes configurações. Por exemplo, talvez você queira variar a política de leitura ou o prazo da RPC para solicitações individuais.
É possível fazer isso transferindo as opções de contexto para praticamente qualquer operação.
Algumas funções relacionadas a transações aceitam as opções de transação, que incluem outras opções com base em um conjunto de opções de contexto.
Veja aqui alguns exemplos que usam opções de contexto. Ao ler uma entidade, para configurar o prazo da RPC para 1 segundo, use o seguinte:
key.get(deadline=1)
Ao gravar uma entidade, para configurar o tempo limite do memcache para 30 segundos, use o seguinte:
ent.put(ndb_memcache_timeout=30)
Para excluir um item armazenado em cache e forçar o recarregamento, use o seguinte:
key.delete(use_datastore=False)
Os argumentos de palavra-chave especiais options e config (que têm significados idênticos por motivos históricos) permitem especificar várias opções como um objeto de configuração. Pode ser um objeto ndb.ContextOptions ou (para as funções transacionais e decorador) um objeto ndb.TransactionOptions.
Por exemplo, key.get(options=ndb.ContextOptions(use_cache=True)) equivale a key.get(use_cache=True).
As opções configuradas em tal objeto de opções são substituídas por parâmetros de palavras-chave.
Estão disponíveis as seguintes opções de contexto:
Opção
Tipo
Descrição
deadline
float
Duração máxima da chamada ao armazenamento de dados, especificado como número de segundos.
Por padrão, a chamada é interrompida apenas pelo prazo do gerenciador de solicitações.
read_policy
ndb.EVENTUAL_CONSISTENCY
Defina isso como ndb.EVENTUAL_CONSISTENCY se, em vez de esperar que o Datastore termine de aplicar as alterações a todos os resultados retornados, você queira receber resultados possivelmente não mais atuais.
force_writes
bool
Especifica se a solicitação de gravação será bem-sucedida, mesmo que o aplicativo seja de somente leitura.
Isso é aplicado somente a períodos de somente leitura controlados pelo usuário.
use_cache
bool
Especifica se é necessário armazenar entidades no cache em processamento e substitui a política de cache em processamento para esta operação.
use_memcache
bool
Especifica se é necessário armazenar entidades no memcache e substitui a política do memcache para esta operação.
use_datastore
bool
Especifica se é necessário armazenar entidades no Datastore e substitui a política do Datastore para esta operação.
memcache_timeout
int
Tempo de vida máximo para entidades no memcache. Substitui a política de tempo limite do memcache para esta operação.
max_memcache_items
int
Tamanho máximo do lote para o recurso de envio em lote automático dos métodos de Context do memcache.
Por exemplo, com o tamanho padrão de max_memcache_items (100), até 100 operações de conjunto do Memcache serão combinadas em uma única operação set_multi.
Para algumas funções relacionadas a transações, as seguintes operações de transações estão disponíveis, junto com as opções de contextos herdadas e listadas acima:
Opção
Tipo
Descrição
xg
bool
Permitir transações entre grupos (XG).
False por padrão.
propagation
int
O NDB oferece suporte limitado para transações dentro de transações, conhecidas como "transações aninhadas".
O parâmetro de propagação controla o que acontece quando seu código tenta iniciar uma transação aninhada.
A política de propagação para @ndb.transactional é padronizada como ALLOWED.
A política de propagação para ndb.transaction() é padronizada como NESTED.
A política NESTED não é compatível com o NDB, então seu código emitirá uma exceção BadRequestError. O NDB configura um valor padrão não compatível neste caso, assim os programadores estão explicitamente cientes das limitações das transações aninhadas.
O parâmetro de propagação é um dos seguintes valores:
ndb.TransactionOptions.NESTED
A política de propagação NESTED confirmaria todas as alterações nas transações internas
e externas quando a política externa executasse uma confirmação. No entanto, caso uma exceção seja lançada na transação interna, todas as alterações serão descartadas, mas permitirão que a transação externa seja opcionalmente recuperada e permaneça. A política NESTED não é compatível. Se você usar essa política, seu código gerará uma exceção BadRequestError.
ndb.TransactionOptions.MANDATORY
Sempre propague uma transação existente. Lance uma exceção
icaso não haja uma transação existente.
Caso uma função, que use essa política, lance uma exceção, talvez não seja seguro detectar essa exceção e executar o "commit" da transação externa. A função talvez tenha deixado essa transação externa em mau estado.
ndb.TransactionOptions.ALLOWED
No caso de haver transação atual, propague-a.
Caso uma função, que use essa política, lance uma exceção, talvez não seja seguro detectar essa exceção e executar o "commit" da transação externa. A função talvez tenha deixado essa transação externa em mau estado.
ndb.TransactionOptions.INDEPENDENT
Sempre use uma nova transação, "pausando" todas as transações atuais.
Uma função que usa essa política não retorna entidade alguma lida na nova transação, porque as entidades não são transacionalmente consistentes com a transação do responsável pela chamada.
retries
int
A quantidade de novas tentativas automáticas, em caso de falhas na transação.
Zero significa tentar uma vez, mas não tentar novamente.
Em alguns casos, as opções serão ignoradas devido ao armazenamento em cache.
Por exemplo, ao especificar um prazo de RPC para uma operação de leitura que é atendida no cache em contexto, o prazo será ignorado.
Por outro lado, as opções não reconhecidas fazem com que TypeError seja gerado.
Operações com diferentes opções são agrupadas quando envio em lote automático é aplicado. Por exemplo, se você usar put_async() para gravar algumas entidades com deadline = 5 e outras sem especificar um prazo, e todas estiverem qualificadas para o lote automático, o lote automático fará duas chamadas RPC separadas, uma para o grupo de entidades com deadline = 5 e uma para o outro grupo, mesmo que o prazo padrão da RPC também seja 5.
Isso se aplica mesmo se a opção especificada for irrelevante para a operação RPC (por exemplo, ndb_should_cache).
[[["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\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`)."]]