Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Un objet Query représente une requête NDB, qui est une requête pour une liste filtrée et triée d'entités.
Cette page contient une documentation de référence. Pour une discussion générale sur les requêtes NDB, consultez la section Requêtes.
Options de requête
De nombreuses méthodes de requête utilisent un ensemble standard d'options supplémentaires, sous la forme d'arguments de mot clé tels que keys_only=True, ou en tant qu'objet QueryOptions transmis avec options=QueryOptions(...).
Les requêtes prennent en charge diverses options de configuration.
Celles-ci sont spécifiées par des arguments de mot clé associés aux méthodes Query :
Argument
Type
Par défaut
Description
keys_only
bool
False
Toutes les opérations renvoient des clés au lieu d'entités.
projection
tuple (ou liste) de propriétés (ou de chaînes)
None
Les opérations renvoient des entités comportant uniquement les propriétés spécifiées définies.
projection=[Article.title, Article.date] ou projection=['title', 'date'] récupère des entités contenant uniquement ces deux champs définis.
(Consultez la section Requêtes de projection.)
offset
int
0
Nombre de résultats de requêtes à ignorer.
limit
int
Aucune limite
Nombre maximal de résultats de requêtes à renvoyer.
batch_size
int
20
Taille du lot.
N'affecte que l'efficacité des requêtes ; les lots plus volumineux utilisent plus de mémoire, mais émettent moins d'appels RPC.
Remplace le délai RPC (défini par défaut sur 5 secondes s'il n'est pas remplacé à la création du Context).
read_policy
ndb.EVENTUAL_CONSISTENCY
Règles de lecture. Définissez sur ndb.EVENTUAL_CONSISTENCY pour obtenir des résultats potentiellement plus rapides sans attendre que le datastore applique les modifications en attente à tous les enregistrements renvoyés.
Pour exécuter une requête avec un ensemble d'options spécifiques, transmettez les arguments de mot clé à la méthode applicable :
qry=Employee.query().filter(...).order(...)# Create a queryforacctinqry.fetch(10,offset=20):# Skip the first 20printacct
Vous devriez parfois conserver un ensemble d'options de requête pour les utiliser à différents endroits. Bien que vous puissiez simplement les conserver dans un dictionnaire et transmettre ce dernier aux méthodes à l'aide de **kwds, vous pouvez également créer un objet QueryOptions et le transmettre à l'aide de l'argument de mot clé des options.
Les deux exemples suivants sont équivalents :
En règle générale, une application crée une Query en appelant Model.query(). Toutefois, il est également possible d'appeler ndb.Query().
Arguments
kind
Chaîne de genre facultative. Normalement, le nom d'une classe d'entité.
ancêtre
Clé d'ancêtre facultative.
filters
Nœud facultatif représentant une arborescence d'expression de filtre.
orders
Objet datastore_query.Order facultatif.
app
Identifiant facultatif d'application.
namespace
Espace de noms facultatif. S'il n'est pas spécifié, l'espace de noms par défaut au moment de l'exécution de la requête est utilisé.
projection
Liste ou tuple facultatif de propriétés à projeter.
group_by
Liste ou tuple facultatif de propriétés à regrouper.
default_options
Objet QueryOptions facultatif donnant les options de requêtes par défaut à utiliser lors de l'exécution de la requête.
Méthodes des instances
filter(filter1, filter2, ...)
Renvoie une nouvelle Query avec un ou plusieurs filtres supplémentaires appliqués.
Prend les arguments de filtre comme décrit dans Requêtes.
qry.filter(filter1).filter(filter2) équivaut à qry.filter(filter1, filter2)
get(**q_options)
Renvoie le premier résultat de la requête, le cas échéant (sinon None).
Cette démarche est semblable à l'appel de q.fetch(1) et au renvoi du premier élément de la liste des résultats.
Renvoie une nouvelle Query à laquelle un ou plusieurs ordres de tri sont appliqués.
Prend un ou plusieurs arguments qui sont des propriétés ou des propriétés "inversées".
Par exemple, pour trier les utilisateurs par âge et les "départager" par nom, vous pouvez utiliser un élément tel que qry.order(-Account.birthday, Account.name)
bind(...values...)
Cette fonction est destinée aux requêtes GQL utilisant des liaisons de paramètres (:1, :2, etc.) ou des liaisons nommées (:foo, :bar, etc.). Elle lie les valeurs transmises aux paramètres.
Pour lier des paramètres, vous pouvez appeler qry.bind("USA", 49).
Pour lier des paramètres nommés, vous pouvez appeler qry.bind(region = "USA", threshold = 49).
Renvoie un nouvel objet Query dans lequel les valeurs de paramètres sont liées.
count(limit=None, **q_options)
Renvoie le nombre de résultats de la requête, jusqu'à une certaine limite.
Cette méthode renvoie le même résultat que len(q.fetch(limit)), mais de manière plus efficace.
Compte de manière asynchrone le nombre de résultats de la requête, jusqu'à une certaine limite et renvoie un Future dont le résultat est un nombre.
Il s'agit de la version asynchrone de count().
fetch(limit, **q_options)
Récupère une liste de résultats de la requête, jusqu'à une certaine limite.
Récupère de manière asynchrone une liste de résultats de la requête, jusqu'à une certaine limite.
Renvoie un Future dont le résultat est une liste de résultats.
Il s'agit de la version asynchrone de fetch().
fetch_page(page_size, **q_options)
Récupère une "page" de résultats. Il s'agit d'une méthode spécialisée, utilisée par les interfaces utilisateur de pagination.
cursor : un curseur de requête pointant vers le "prochain" lot de résultats. S'il n'y a plus de résultats, il peut afficher None.
morebool indique s'il y a (probablement) plus de résultats après ce lot.
Si la valeur est False, il n'y a plus de résultats. Si la valeur est True, il y a probablement plus de résultats.
Pour récupérer la page suivante, transmettez le curseur renvoyé par un appel à l'appel suivant à l'aide de start_cursor=cursor.
Un idiome courant doit transmettre le curseur au client à l'aide de cursor.urlsafe() et reconstruire ce curseur lors d'une requête ultérieure à l'aide de Cursor(urlsafe=string).
fetch_page_async(page_size, **q_options)
Récupère de manière asynchrone une "page" de résultats. Il s'agit de la version asynchrone de fetch_page().
get_async(**q_options)
Renvoie de manière asynchrone le résultat de la première requête, le cas échéant (sinon, None). Il s'agit de la version asynchrone de get().
Mappez une fonction de rappel ou un tasklet sur les résultats de la requête. Autrement dit, appliquez la fonction (ou le tasklet) à chaque entité dans les résultats de la requête.
Arguments
callback
Une fonction ou un tasklet à appliquer à chaque résultat.
pass_batch_into_callback
Si la valeur est True, il appelle le rappel avec des arguments d'informations de lot comme décrit ci-dessous.
Signature de rappel : le rappel est normalement appelé avec une entité comme argument. Cependant, si la valeur keys_only=True est donnée, il est appelé avec une clé.
Si la valeur pass_batch_into_callback=True est donnée, le rappel est appelé avec trois arguments : le lot en cours, l'index du lot et l'entité ou la Key de cet index.
Le rappel peut renvoyer ce qu'il veut. Si le rappel a la valeur None, un rappel trivial par défaut renvoie l'entité ou la clé transmise.
Argument merge_future facultatif : merge_future est un argument avancé qui peut être utilisé pour modifier la façon dont les résultats de rappel sont combinés dans la valeur de retour map() globale. Par défaut, une liste de valeurs de retour de rappel est générée. En remplaçant l'une des quelques alternatives spécialisées, vous pouvez vous organiser différemment. Consultez le code source de tasklets.MultiFuture pour obtenir la mise en œuvre par défaut et une description du protocole que l'objet merge_future doit mettre en œuvre. Les alternatives du même module incluent QueueFuture, SerialQueueFuture et ReducingFuture.
Renvoie une liste des résultats de tous les rappels.
Consultez la section "merge_future facultatif" ci-dessus. Il apparaît lorsque la requête est terminée et que tous les rappels ont été renvoyés.
Mappez de manière asynchrone une fonction de rappel ou un tasklet sur les résultats de la requête.
Il s'agit de la version asynchrone de map().
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 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)."]]