Un objeto Query
representa una consulta de NDB, una solicitud de una lista filtrada y ordenada de entidades.
Esta página contiene documentación de referencia. Para obtener información general sobre las consultas de NDB, consulta Consultas.
Opciones de consulta
Muchos métodos de consulta aceptan un conjunto estándar de opciones adicionales, ya sea en forma de argumentos de palabras clave, como keys_only=True
, o como objeto QueryOptions
transmitido con options=QueryOptions(...)
.
Las consultas admiten varias opciones de configuración.
Se especifican mediante argumentos de palabras clave en los métodos Query
:
Argumento | Tipo | Predeterminado | Descripción |
---|---|---|---|
keys_only | bool | False | Todas las operaciones devuelven claves en lugar de entidades. |
proyección | tupla (o lista) de propiedades (o cadenas) | None
| Las operaciones devuelven entidades con solo las propiedades especificadas.
definidas.
projection=[Article.title, Article.date]
o projection=['title', 'date']
obtiene las entidades que tienen definidos esos dos campos.
(Consulta Consultas de proyección).
|
offset | int | 0 | Número de resultados de la consulta que se omitirán. |
límite | int | Sin límite | Número máximo de resultados de consulta que se devolverán. |
batch_size | int | 20 | Tamaño del lote. Solo afecta a la eficiencia de las consultas. Los tamaños de lote más grandes usan más memoria, pero hacen menos llamadas RPC. |
prefetch_size | int | None | Anula el tamaño del lote del primer lote devuelto. |
produce_cursors | bool | False
| Generar cursores a partir de una consulta (consulta Iteradores de consultas). Cursores de consultas). |
start_cursor | Cursor | None
| Punto de partida de la búsqueda (consulta cursores de consulta). |
end_cursor | Cursor | None
| Punto final de la búsqueda (consulta cursores de consulta). |
deadline | int | Depende de Context
| Anula el plazo de RPC (que es de 5 segundos de forma predeterminada si no se anula al crear Context ).
|
read_policy | ndb.EVENTUAL_CONSISTENCY
| La política de lectura. Definir como ndb.EVENTUAL_CONSISTENCY para obtener resultados más rápidos sin esperar a que Datastore aplique los cambios pendientes a todos los registros devueltos.
|
Para ejecutar una consulta con un conjunto específico de opciones, pasa los argumentos de palabras clave al método aplicable:
qry = Employee.query().filter(...).order(...) # Create a query for acct in qry.fetch(10, offset=20): # Skip the first 20 print acct
En ocasiones, puede que quieras conservar un conjunto de opciones de consulta
y usarlas en varios lugares. Aunque podrías guardarlos en un diccionario y pasar este diccionario a los métodos mediante **kwds
, también puedes crear un objeto QueryOptions
y pasarlo mediante el argumento de palabra clave options.
Los dos ejemplos siguientes son equivalentes:
qo = ndb.QueryOptions(keys_only=True, offset=20) results = qry.fetch(10, options=qo) results = qry.fetch(10, keys_only=True, offset=20)
Constructor
Normalmente, una aplicación crea un Query
llamando a
Model.query()
. Pero también puedes llamar a
ndb.Query()
.
Argumentos
- kind
- Cadena de tipo opcional. Normalmente, el nombre de una clase de entidad.
- ancestor
- Clave de ancestro opcional.
- filtros
- Nodo opcional que representa un árbol de expresiones de filtro.
- pedidos Objeto
- opcional
datastore_query.Order
. - aplicación
- ID de aplicación opcional.
- namespace
- Espacio de nombres opcional. Si no se especifica, se usará el espacio de nombres predeterminado en el momento en que se ejecute la consulta.
- proyección
- Lista o tupla opcional de propiedades que se van a proyectar.
- group_by
- Lista o tupla opcional de propiedades por las que agrupar.
- default_options
- Opcional
Objeto
QueryOptions
que proporciona opciones de consulta predeterminadas que se usarán cuando se ejecute la consulta.
Métodos de instancia
- filter(filter1, filter2, ...)
- Devuelve un nuevo
Query
con los filtros adicionales aplicados. Usa argumentos de filtro tal como se describe en Consultas.qry.filter(filter1).filter(filter2)
es igual aqry.filter(filter1, filter2)
- get(**q_options)
- Devuelve el primer resultado de la consulta, si hay alguno (de lo contrario,
None
). Es similar a llamar aq.fetch(1)
y devolver el primer elemento de la lista de resultados.Argumentos
- **q_options Se admiten
- todos los argumentos de palabras clave de las opciones de consulta.
- order(order1, order2, ...)
- Devuelve un nuevo
Query
con los criterios de ordenación adicionales aplicados. Toma uno o varios argumentos que son propiedades o propiedades "negadas". Por ejemplo, para ordenar a los usuarios por edad y "desempatar" por nombre, puedes usar algo comoqry.order(-Account.birthday, Account.name)
- bind(...values...)
- Esta función se usa con consultas de GQL que utilizan enlaces de parámetros (
:1
,:2
, etc.) o enlaces con nombre (:foo
,:bar
, etc.). Asigna los valores transmitidos a los parámetros.Para vincular parámetros, puedes llamar a algo parecido a
qry.bind("USA", 49)
. Para vincular parámetros con nombre, puedes llamar a algo comoqry.bind(region = "USA", threshold = 49)
.Devuelve un nuevo objeto
Query
con los valores de los parámetros vinculados. - count(limit=None, **q_options)
- Devuelve el número de resultados de la consulta, hasta un límite.
Devuelve el mismo resultado que
len(q.fetch(limit))
, pero de forma más eficiente.Argumentos
- limit
- Número máximo de resultados que se deben contar
- **q_options
- Se admiten todos los argumentos de palabras clave de las opciones de consulta y las opciones de contexto.
- count_async(limit, **q_options)
- Cuenta de forma asíncrona el número de resultados de la consulta, hasta un límite;
devuelve un
Future
cuyo resultado es un número. Esta es la versión asíncrona de count(). - fetch(limit, **q_options)
- Obtener una lista de resultados de consulta, hasta un límite.
Argumentos
- limit
- Número máximo de resultados que se deben contar
- **q_options Se admiten
- todos los argumentos de palabras clave de las opciones de consulta.
- fetch_async(limit, **q_options)
- Obtiene de forma asíncrona una lista de resultados de consulta, hasta un límite.
Devuelve un
Future
cuyo resultado es una lista de resultados. Esta es la versión asíncrona de fetch(). - fetch_page(page_size, **q_options)
- Obtener una "página" de resultados. Este es un método especializado para
usar en interfaces de usuario de paginación.
Argumentos
- page_size
- Se devolverá este número de resultados como máximo.
- **q_options Se admiten
- todos los argumentos de palabras clave de las opciones de consulta.
(results, cursor, more)
:- results lista de resultados de la consulta
- cursor un cursor de consulta que apunta
al siguiente lote de resultados. Si no hay más resultados, puede que se trate de
None
. - more
bool
indica si (probablemente) hay más resultados después de este lote. Si el valor esFalse
, no hay más resultados. Si el valor esTrue
, probablemente haya más resultados.
Para obtener la página siguiente, pasa el cursor devuelto por una llamada a la siguiente llamada mediante
start_cursor=cursor
. Una práctica habitual es pasar el cursor al cliente mediantecursor.urlsafe()
y reconstruir ese cursor en una solicitud posterior medianteCursor(urlsafe=string)
. - fetch_page_async(page_size, **q_options)
- Obtiene de forma asíncrona una "página" de resultados. Esta es la versión asíncrona de fetch_page().
- get_async(**q_options)
- Devuelve de forma asíncrona el primer resultado de la consulta (si hay alguno)
(de lo contrario,
None
). Es la versión asíncrona de get(). - iter(**q_options)
- Crea y devuelve un iterador sobre la consulta.
Argumentos
- **q_options Se admiten
- todos los argumentos de palabras clave de las opciones de consulta.
Devuelve un objeto QueryIterator.
- map(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
- Asigna una función de retrollamada o una tarea a los resultados de la consulta. Es decir, aplica la función (o tasklet) a cada entidad de los resultados de la consulta.
Argumentos
- devolución de llamada
- Función o tarea que se aplicará a cada resultado.
- pass_batch_into_callback
- Si
True
, llama a la retrollamada con información del lote argumentos tal como se describe a continuación. - merge_future Subclase
- opcional
Future
; consulta la información que aparece más abajo. - **q_options Se admiten
- todos los argumentos de palabras clave de las opciones de consulta.
Firma de retrollamada: la retrollamada se suele invocar con una entidad como argumento. Sin embargo, si se proporciona
keys_only=True
, se llama con una clave. Si se proporcionapass_batch_into_callback=True
, se llama a la retrollamada con tres argumentos: el lote actual, el índice dentro del lote y la entidad oKey
en ese índice. La retrollamada puede devolver lo que quiera. Si la retrollamada esNone
, se presupone una retrollamada trivial que solo devuelve la entidad o la clave transferida.Opcional
merge_future
merge_future
es un argumento avanzado que se puede usar para anular cómo se combinan los resultados de la retrollamada en el valor de retorno general demap()
. De forma predeterminada, se genera una lista de valores devueltos de retrollamada. Sustituyendo una de las pocas alternativas especializadas, puedes organizarlo de otra forma. Consulta el código fuente detasklets.MultiFuture
para ver la implementación predeterminada y una descripción del protocolo que debe implementar el objetomerge_future
. Entre las alternativas del mismo módulo se incluyenQueueFuture
,SerialQueueFuture
yReducingFuture
.Devuelve una lista con los resultados de todas las devoluciones de llamada. Sin embargo, consulta la sección "
merge_future
opcional" de arriba. Devuelve cuando la consulta se ha completado y todas las retrollamadas han devuelto un valor. - map_async(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
- Asigna de forma asíncrona una función de retrollamada o una tarea a los resultados de la consulta. Esta es la versión asíncrona de map().