Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Um objeto Query representa uma consulta NDB, uma solicitação para
uma lista de entidades filtrada e classificada.
Esta página contém documentação de referência. Para uma discussão geral sobre as consultas NDB, veja Consultas.
Opções de consulta
Muitos métodos de consulta usam um conjunto padrão de opções
extras, seja na forma de argumentos de palavra-chave, como
keys_only=True, ou como objeto
QueryOptions transmitido com
options=QueryOptions(...).
As consultas são compatíveis com várias opções de configuração.
Elas são especificadas por argumentos de palavra-chave para os métodos Query:
Argumento
Tipo
Padrão
Descrição
keys_only
bool
False
Todas as operações retornam chaves em vez de entidades.
projection
tupla (ou lista) de propriedades (ou strings)
None
As operações retornam entidades apenas com o conjunto especificado de
propriedades.
projection=[Article.title, Article.date]
ou projection=['title', 'date']
busca entidades com somente esses dois campos definidos.
Veja Consultas de projeção.
offset
int
0
Número de resultados da consulta para ignorar.
limit
int
Sem limite
Número máximo de resultados da consulta para retornar.
batch_size
int
20
Tamanho do batch.
Afeta somente a eficiência das consultas. Tamanhos de lote maiores usam mais memória, mas fazem menos chamadas RPC.
prefetch_size
int
None
Modifica o tamanho do lote para o primeiro lote retornado.
Modifica o prazo final da RPC (que tem o padrão de cinco segundos se não for modificada quando
Context é criado)
read_policy
ndb.EVENTUAL_CONSISTENCY
A política de leitura. Defina como ndb.EVENTUAL_CONSISTENCY para gerar
resultados que podem ser mais rápidos sem esperar que o Datastore
aplique as alterações pendentes a todos os registros retornados.
Para executar uma consulta com um conjunto específico de opções, passe os argumentos de palavra-chave para o método aplicável:
qry=Employee.query().filter(...).order(...)# Create a queryforacctinqry.fetch(10,offset=20):# Skip the first 20printacct
Às vezes, pode ser conveniente manter um conjunto de opções de consulta e usá-las em vários lugares. É possível mantê-las
em um dicionário e transmitir este dicionário para os
métodos usando **kwds. Também é possível criar um objeto
QueryOptions e transmiti-lo
usando o argumento de opções de palavra-chave.
Os dois exemplos seguintes são equivalentes:
Normalmente, um aplicativo cria um Query chamando
Model.query(). No entanto, também é possível chamar
ndb.Query().
Argumentos
kind
String de tipo opcional. Normalmente, o nome de uma classe de entidade.
ancestor
Chave ancestral opcional.
filters
Nó opcional que representa uma árvore de expressão de filtro.
orders
Objeto datastore_query.Order opcional.
app
ID opcional do aplicativo.
namespace
Namespace opcional. Se não for especificado, será usado o namespace padrão no momento em que a consulta for executada.
projection
Lista ou tupla opcional de propriedades para projetar.
group_by
Lista ou tupla opcional de propriedades para agrupamento.
default_options
Objeto
QueryOptions opcional
que fornece as opções de consulta padrão a serem usadas quando a consulta é executada.
Métodos de instância
filter(filter1, filter2, ...)
Retorna uma nova Query com mais filtros aplicados.
Aceita argumentos de filtro, conforme descrito em
Consultas.
qry.filter(filter1).filter(filter2)
é equivalente a
qry.filter(filter1, filter2)
get(**q_options)
Retorna o primeiro resultado da consulta, se houver (caso contrário, None).
Isso é semelhante a chamar q.fetch(1) e retornar
o primeiro item da lista de resultados.
Retorna uma nova Query com mais ordens de classificação aplicadas.
Aceita um ou mais argumentos que são propriedades ou propriedades "negadas".
Por exemplo, para classificar os usuários por idade e "separações" por nome,
use algo como qry.order(-Account.birthday, Account.name)
bind(...values...)
Esta função é para uso em consultas GQL que usam vinculações de
parâmetro (:1, :2 etc.) ou vinculações nomeadas
(:foo, :bar etc.). Ela vincula os valores passados aos parâmetros.
Para vincular parâmetros, chame algo como
qry.bind("USA", 49).
Para vincular parâmetros nomeados, chame algo como
qry.bind(region = "USA", threshold = 49).
Retorna um novo objeto Query com os valores de parâmetro vinculados.
count(limit=None, **q_options)
Retorna o número de resultados da consulta, até um limite.
Isso retorna o mesmo resultado len(q.fetch(limit)), mas com mais
eficiência.
Conta de maneira assíncrona o número de resultados da consulta, até um limite.
Retorna um Future
que tem um número como resultado.
Esta é a versão assíncrona de count().
fetch(limit, **q_options)
Busca uma lista de resultados da consulta, até um limite.
Busca, de maneira assíncrona, uma lista de resultados da consulta, até um limite.
Retorna um Future
que tem como resultado uma lista de resultados.
Esta é a versão assíncrona de fetch().
fetch_page(page_size, **q_options)
Busca uma "página" de resultados. Trata-se de um método especializado para uso por interfaces do usuário de paginação.
cursor um cursor de consulta que aponta
para o "próximo" lote de resultados. Se não houver mais resultados, pode
ser None.
morebool indica se há (provavelmente)
mais resultados após esse lote.
Se False, não há mais resultados.
Se True, há provavelmente mais resultados.
Para buscar a próxima página,
transmita o cursor retornado por uma chamada para a próxima chamada usando
start_cursor=cursor.
Um idioma comum é transmitir o cursor para
o cliente usando cursor.urlsafe()
e reconstruir esse cursor em uma solicitação subsequente usando
Cursor(urlsafe=string).
fetch_page_async(page_size, **q_options)
Busca, de maneira assíncrona, uma "página" de resultados. Esta é a versão assíncrona
de fetch_page().
get_async(**q_options)
Retorna, de maneira assíncrona, o primeiro resultado da consulta, se houver.
Caso contrário, None. Esta é a versão assíncrona
de get().
iter(**q_options)
Constrói e retorna um iterador com base na consulta.
Mapeia uma função de callback ou um tasklet com base nos resultados da consulta. Ou seja, aplica a função (ou tasklet) a cada entidade nos resultados da consulta.
Argumentos
callback
Uma função ou tasklet para aplicação em cada resultado.
pass_batch_into_callback
Se True, chamará o callback com argumentos de informações
do lote, conforme descrito abaixo.
Assinatura de retorno de chamada: o retorno de chamada é normalmente chamado com uma entidade como
argumento. No entanto, se
keys_only=True for fornecido, ele será chamado
com uma Chave.
Se pass_batch_into_callback=True for fornecido, a callback será
chamada com três argumentos: o lote atual, o índice dentro
do lote e a entidade ou Key nesse índice.
O retorno de chamada pode retornar o que quiser. Se a callback for None, será considerada
uma callback trivial que só retorna a entidade ou a chave transmitida.
merge_future opcional O merge_future
é um argumento avançado
que pode ser usado para modificar como os resultados de callback são combinados
no valor de retorno geral map(). Por padrão, uma lista de valores de retorno de chamada é produzida. Ao substituir uma de um pequeno número de alternativas especializadas, você pode providenciar o contrário. Consulte o código-fonte de
tasklets.MultiFuture para a implementação
padrão e uma descrição do
protocolo que o objeto merge_future
precisa implementar. As alternativas do mesmo
módulo incluem QueueFuture, SerialQueueFuture
e ReducingFuture.
Retorna uma lista dos resultados de todos os retornos de chamada.
Mas veja "merge_future opcional" acima. Ele é retornado quando a consulta foi executada até a conclusão e todos os retornos de chamada foram apresentados.
[[["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 documentation covers how to use NDB queries within the legacy App Engine standard environment's first-generation runtimes, noting that for App Engine Python 3, a migration guide is recommended.\u003c/p\u003e\n"],["\u003cp\u003eAn NDB \u003ccode\u003eQuery\u003c/code\u003e object is used to request a filtered and sorted list of entities, and you can create one using the \u003ccode\u003e<var>Model</var>.query()\u003c/code\u003e method or directly using \u003ccode\u003endb.Query()\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eQueries can be configured using various keyword arguments or a \u003ccode\u003eQueryOptions\u003c/code\u003e object, allowing for customizations such as returning only keys (\u003ccode\u003ekeys_only\u003c/code\u003e), limiting results (\u003ccode\u003elimit\u003c/code\u003e), skipping results (\u003ccode\u003eoffset\u003c/code\u003e), or specifying a data projection (\u003ccode\u003eprojection\u003c/code\u003e).\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eQuery\u003c/code\u003e object has several instance methods like \u003ccode\u003efilter()\u003c/code\u003e, \u003ccode\u003eorder()\u003c/code\u003e, \u003ccode\u003eget()\u003c/code\u003e, \u003ccode\u003ecount()\u003c/code\u003e, \u003ccode\u003efetch()\u003c/code\u003e, \u003ccode\u003efetch_page()\u003c/code\u003e, \u003ccode\u003emap()\u003c/code\u003e and their async versions, allowing for advanced query customization, execution, and data retrieval.\u003c/p\u003e\n"],["\u003cp\u003eQuery methods often accept keyword arguments, such as \u003ccode\u003elimit\u003c/code\u003e, \u003ccode\u003eoffset\u003c/code\u003e, \u003ccode\u003ekeys_only\u003c/code\u003e, and \u003ccode\u003eprojection\u003c/code\u003e, to refine the results, and these same options can be used in a \u003ccode\u003eQueryOptions\u003c/code\u003e object.\u003c/p\u003e\n"]]],[],null,["# NDB Query Class\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\nA `Query` object represents an NDB query, a request for\na filtered, sorted list of entities.\n\nThis page contains reference documentation. For a general discussion\nof NDB queries, see [Queries](/appengine/docs/legacy/standard/python/ndb/queries).\n\nQuery Options\n-------------\n\nMany query methods take a standard set of additional\noptions, either in the form of keyword arguments such as\n`keys_only=True`, or as\n`QueryOptions` object passed with\n`options=QueryOptions(...)`.\n\nQueries support a variety of configuration options.\nThese are specified by keyword arguments to the `Query` methods:\n\nTo run a query with a specific set of options,\npass the keyword arguments to the applicable method:\n\n```python\nqry = Employee.query().filter(...).order(...) # Create a query\nfor acct in qry.fetch(10, offset=20): # Skip the first 20\n print acct\n```\n\nOccasionally, you might want to keep a set of query options\naround and use them in various places. While you could just\nkeep them in a dictionary and pass this dictionary to the\nmethods using `**kwds`, you can also create a\n`QueryOptions` object and pass\nit using the options keyword argument.\nThe following two examples are equivalent:\n\n```python\nqo = ndb.QueryOptions(keys_only=True, offset=20)\nresults = qry.fetch(10, options=qo)\nresults = qry.fetch(10, keys_only=True, offset=20)\n```\n\nConstructor\n-----------\n\nTypically, an application creates a `Query` by calling\n\u003cvar translate=\"no\"\u003eModel\u003c/var\u003e`.query()`. But it's also possible to call\n`ndb.Query()`.\n\n**Arguments**\n\nkind\n: Optional kind string. Normally, the name of a entity class.\n\nancestor\n: Optional ancestor Key.\n\nfilters\n: Optional Node representing a filter expression tree.\n\norders\n: Optional `datastore_query.Order` object.\n\napp\n: Optional app id.\n\nnamespace\n: Optional namespace. If not specified,\n the default namespace at the time the query is executed will be used.\n\nprojection\n: Optional list or tuple of properties to project.\n\ngroup_by\n: Optional list or tuple of properties to group by.\n\ndefault_options\n: Optional\n [QueryOptions](/appengine/docs/legacy/standard/python/ndb/queryclass#kwdargs_options) object\n giving default query options to be used when the query is executed.\n\nInstance Methods\n----------------\n\nfilter(\u003cvar translate=\"no\"\u003efilter1, filter2, ...\u003c/var\u003e)\n: Returns a new `Query` with additional filter(s) applied.\n Takes filter arguments as described in\n [Queries](/appengine/docs/legacy/standard/python/ndb/queries).\n `qry.filter(`\u003cvar translate=\"no\"\u003efilter1\u003c/var\u003e`).filter(`\u003cvar translate=\"no\"\u003efilter2\u003c/var\u003e`)`\n is equivalent to\n `qry.filter(`\u003cvar translate=\"no\"\u003efilter1\u003c/var\u003e`, `\u003cvar translate=\"no\"\u003efilter2\u003c/var\u003e`)`\n\nget(\\*\\*q_options)\n: Returns the first query result, if any (otherwise `None`).\n This is similar to calling `q.fetch(1)` and returning\n the first item of the list of results.\n\n **Arguments**\n\n \\*\\*q_options\n : All [query options keyword arguments](#kwdargs_options)\n are supported.\n\norder(\u003cvar translate=\"no\"\u003eorder1\u003c/var\u003e, \u003cvar translate=\"no\"\u003eorder2\u003c/var\u003e, ...)\n: Returns a new `Query` with additional sort order(s) applied.\n Takes one or more arguments which are properties or \"negated\" properties.\n For example, to sort users by age and \"break ties\" by name, you might\n use something like `qry.order(-Account.birthday, Account.name)`\n\nbind(\u003cvar translate=\"no\"\u003e...values...\u003c/var\u003e)\n: This function is for use with GQL queries that use parameter\n bindings (`:1`, `:2`, etc.) or named bindings\n (`:foo`, `:bar`, etc.). It binds the passed\n values to the parameters.\n\n To bind parameters, you might call something like\n `qry.bind(\"USA\", 49)`.\n To bind named parameters, you might call something like\n `qry.bind(region = \"USA\", threshold = 49)`.\n\n Returns a new `Query` object with the parameter values bound.\n\ncount(limit=None, \\*\\*q_options)\n: Returns the number of query results, up to a limit.\n This returns the same result as `len(q.fetch(limit))` but more\n efficiently.\n\n **Arguments**\n\n limit\n : How many results to count at most\n\n \\*\\*q_options\n : All [query options keyword arguments](#kwdargs_options)\n and [context options](/appengine/docs/legacy/standard/python/ndb/functions#context_options)\n are supported.\n\ncount_async(limit, \\*\\*q_options)\n: Asynchronously counts the number of query results, up to a limit;\n it returns a [Future](/appengine/docs/legacy/standard/python/ndb/futureclass)\n whose result is a number.\n This is the asynchronous version of [count()](#Query_count).\n\nfetch(limit, \\*\\*q_options)\n\n: Fetch a list of query results, up to a limit. **Arguments**\n\n limit\n : How many results to count at most\n\n \\*\\*q_options\n : All [query options keyword arguments](#kwdargs_options)\n are supported.\n\nfetch_async(limit, \\*\\*q_options)\n: Asynchronously fetch a list of query results, up to a limit.\n Returns a [Future](/appengine/docs/legacy/standard/python/ndb/futureclass)\n whose result is a list of results.\n This is the asynchronous version of [fetch()](#Query_fetch).\n\nfetch_page(page_size, \\*\\*q_options)\n\n: Fetch a \"page\" of results. This is a specialized method for use by paging user interfaces. **Arguments**\n\n page_size\n : At most this many results will be returned.\n\n \\*\\*q_options\n : All [query options keyword arguments](#kwdargs_options)\n are supported.\n\n Returns a tuple `(`\u003cvar translate=\"no\"\u003eresults\u003c/var\u003e`,\n `\u003cvar translate=\"no\"\u003ecursor\u003c/var\u003e`, `\u003cvar translate=\"no\"\u003emore\u003c/var\u003e`)`:\n\n - \u003cvar translate=\"no\"\u003eresults\u003c/var\u003e list of query results\n - \u003cvar translate=\"no\"\u003ecursor\u003c/var\u003e a [query cursor](/appengine/docs/legacy/standard/python/ndb/queries#cursors) pointing to the \"next\" batch of results. If there are no more results, this might be `None`.\n - \u003cvar translate=\"no\"\u003emore\u003c/var\u003e `bool` indicating whether there are (likely) more results after this batch. If `False`, there are no more results; if `True`, there are *probably* more results.\n\n To fetch the next page,\n pass the cursor returned by one call to the next call using\n `start_cursor=`\u003cvar translate=\"no\"\u003ecursor\u003c/var\u003e.\n A common idiom is to pass the cursor to\n the client using \u003cvar translate=\"no\"\u003ecursor\u003c/var\u003e`.urlsafe()`\n and to reconstruct that cursor on a subsequent request using\n `Cursor(urlsafe=`\u003cvar translate=\"no\"\u003estring\u003c/var\u003e`)`.\n\nfetch_page_async(page_size, \\*\\*q_options)\n: Asynchronously fetch a \"page\" of results. This is the asynchronous version\n of [fetch_page()](#Query_fetch_page).\n\nget_async(\\*\\*q_options)\n: Asynchronously returns the first query result, if any\n (otherwise `None`). This is the asynchronous version\n of [get()](#Query_get).\n\niter(\\*\\*q_options)\n\n: Constructs and returns an iterator over the query. **Arguments**\n\n \\*\\*q_options\n : All [query options keyword arguments](#kwdargs_options)\n are supported.\n\n Returns a [QueryIterator](/appengine/docs/legacy/standard/python/ndb/queries#iterators) object.\n\nmap(callback, pass_batch_into_callback=None, merge_future=None, \\*\\*q_options)\n\n: Map a callback function or tasklet over the query results. That is, apply the function (or tasklet) to each entity in the query results. **Arguments**\n\n callback\n : A function or tasklet to be applied to each result.\n\n pass_batch_into_callback\n : If `True`, calls the callback with batch information\n arguments as described below.\n\n merge_future\n : Optional [Future](/appengine/docs/legacy/standard/python/ndb/futureclass) subclass;\n see below.\n\n \\*\\*q_options\n : All [query options keyword arguments](#kwdargs_options)\n are supported.\n\n *Callback signature* The callback is normally called with an entity\n as argument. However, if\n `keys_only=True` is given, it is called\n with a [Key](/appengine/docs/legacy/standard/python/ndb/keyclass).\n If `pass_batch_into_callback=True` is given, the callback is\n called with three arguments: the current batch, the index within\n the batch, and the entity or `Key` at that index.\n The callback can\n return whatever it wants. If the callback is `None`, a trivial\n callback is assumed that just returns the entity or key passed in.\n\n *Optional `merge_future`* The `merge_future`\n is an advanced argument\n that can be used to override how the callback results are combined\n into the overall `map()` return value. By default, a list of\n callback return values is produced. By substituting one of a\n small number of specialized alternatives you can arrange\n otherwise. See the source code for\n `tasklets.MultiFuture` for the default\n implementation and a description of\n the protocol the `merge_future`\n object must implement. Alternatives from the same\n module include `QueueFuture`, `SerialQueueFuture`\n and `ReducingFuture`.\n\n Returns a list of the results of all the callbacks.\n (But see 'optional `merge_future`' above.) It returns\n when the query has run to completion and all callbacks have returned.\n\nmap_async(callback, pass_batch_into_callback=None, merge_future=None, \\*\\*q_options)\n: Asynchronously map a callback function or tasklet over the query results.\n This is the asynchronous version of [map()](#map)."]]