Ein Query
-Objekt stellt eine NDB-Abfrage dar, also eine Anfrage bezüglich einer gefilterten, sortierten Liste von Entitäten.
Diese Seite enthält eine Referenzdokumentation. Eine allgemeine Beschreibung von NDB-Abfragen finden Sie unter Abfragen.
Abfrageoptionen
Viele Abfragemethoden enthalten zusätzliche Standardoptionen in Form von Schlüsselwortargumenten wie keys_only=True
oder als QueryOptions
-Objekt, das mit options=QueryOptions(...)
übergeben wird.
Abfragen unterstützen eine Vielzahl von Konfigurationsoptionen.
Diese werden durch Schlüsselwortargumente für die Query
-Methoden angegeben:
Argument | Typ | Standardeinstellung | Beschreibung |
---|---|---|---|
keys_only | bool | False | Alle Vorgänge geben Schlüssel statt Entitäten zurück. |
Projektion | Tupel (oder Liste) von Properties (oder Strings) | None
| Operationen geben Entitäten zurück, die ausschließlich die festgelegten Properties enthalten.
projection=[Article.title, Article.date] oder projection=['title', 'date'] ruft Entitäten mit nur diesen beiden festgelegten Feldern ab
(siehe Projektionsabfragen).
|
offset | int | 0 | Anzahl der zu überspringenden Abfrageergebnisse. |
Limit | int | Kein Limit | Maximale Anzahl der Abfrageergebnisse, die zurückgegeben werden sollen. |
batch_size | int | 20 | Batchgröße. Beeinflusst nur die Effizienz von Abfragen. Bei größeren Batches wird mehr Speicher verwendet, aber die Zahl der RPC-Aufrufe ist geringer. |
prefetch_size | int | None | Überschreibt die Batchgröße für den ersten zurückgegebenen Batch. |
produce_cursors | bool | False
| Generiert Cursor aus der Abfrage (siehe Abfrage-Iteratoren. Abfrage-Cursor.) |
start_cursor | Cursor | None
| Startpunkt für die Suche (siehe Abfrage-Cursor). |
end_cursor | Cursor | None
| Endpunkt für die Suche (siehe Abfrage-Cursor). |
deadline | int | Je nach Context
| Überschreibt das RPC-Zeitlimit (das standardmäßig fünf Sekunden beträgt, wenn es beim Erstellen von Context nicht überschrieben wird)
|
read_policy | ndb.EVENTUAL_CONSISTENCY
| Die Leserichtlinie. Auf ndb.EVENTUAL_CONSISTENCY festgelegt, um eventuell schnellere Ergebnisse zu generieren. Es wird dabei nicht darauf gewartet, dass der Datenspeicher ausstehende Änderungen auf alle zurückgegebenen Datensätze anwendet.
|
Um eine Abfrage mit bestimmten Optionen auszuführen, übergeben Sie die Schlüsselwortargumente an die entsprechende Methode:
qry = Employee.query().filter(...).order(...) # Create a query for acct in qry.fetch(10, offset=20): # Skip the first 20 print acct
Es kann vorkommen, dass Sie eine Reihe von Abfrageoptionen beibehalten und an verschiedenen Stellen verwenden möchten. Sie können sie einfach in einem Wörterbuch beibehalten und dieses mithilfe von **kwds
an die Methode übergeben. Sie können aber auch ein QueryOptions
-Objekt erstellen und es mit dem Schlüsselwortargument für Optionen übergeben.
Die folgenden zwei Beispiele sind gleichwertig:
qo = ndb.QueryOptions(keys_only=True, offset=20) results = qry.fetch(10, options=qo) results = qry.fetch(10, keys_only=True, offset=20)
Konstruktor
In der Regel erstellt eine Anwendung eine Query
durch Aufruf von Model.query()
. Abfragen können aber auch mit ndb.Query()
durchgeführt werden.
Argumente
- Typ
- Optionaler String für die Art. Normalerweise der Name einer Entitätsklasse.
- ancestor
- Optionaler Ancestor-Schlüssel
- filters
- Optionaler Knoten, der eine Filterausdrucksstruktur darstellt
- orders
- Optionales
datastore_query.Order
-Objekt - app
- Optionale Anwendungs-ID
- Namespace
- Optionaler Namespace. Wenn keine Angabe erfolgt, wird der bei der Ausführung der Abfrage festgelegte Standard-Namespace verwendet.
- Projektion
- Optionale Liste oder Tupel von Properties, die projiziert werden sollen
- group_by
- Optionale Liste oder Tupel von Properties, nach denen gruppiert werden soll
- default_options
- Optionales
QueryOptions
-Objekt, das zur Ausführung der Abfrage Standardabfrageoptionen zur Verfügung stellt
Instanzmethoden
- filter(filter1, filter2, ...)
- Gibt eine neue
Query
mit zusätzlichen angewendeten Filtern zurück. Verwendet Filterargumente, wie unter Abfragen erläutert.qry.filter(filter1).filter(filter2)
entsprichtqry.filter(filter1, filter2)
- get(**q_options)
- Gibt das erste Abfrageergebnis zurück, falls vorhanden (andernfalls
None
). Ähnlich verhält es sich, wennq.fetch(1)
aufgerufen und das erste Element der Ergebnisliste zurückgegeben wird.Argumente
- **q_options
- Alle Schlüsselwortargumente für Abfrageoptionen werden unterstützt.
- order(order1, order2, ...)
- Gibt eine neue
Query
mit zusätzlichen angewendeten Sortierreihenfolgen zurück. Verwendet ein oder mehrere Argumente, bei denen es sich um Attribute oder "negierte" Attribute handelt. Beispiel: Zum Sortieren von Nutzern nach Alter und, falls mehrere Treffer vorhanden sind, nach Name können Sie beispielsweiseqry.order(-Account.birthday, Account.name)
verwenden. - bind(...values...)
- Diese Funktion ist für GQL-Abfragen vorgesehen, die Parameterbindungen (
:1
,:2
usw.) oder benannte Bindungen (:foo
,:bar
usw.) verwenden. Es bindet die übergebenen Werte an die Parameter.Zum Binden von Parametern können Sie beispielsweise
qry.bind("USA", 49)
aufrufen. Zum Binden von benannten Parametern können Sie beispielsweiseqry.bind(region = "USA", threshold = 49)
aufrufen.Gibt ein neues
Query
-Objekt mit den gebundenen Parameterwerten zurück - count(limit=None, **q_options)
- Gibt die Anzahl der Abfrageergebnisse bis zu einem Grenzwert zurück.
Hier wird dasselbe Ergebnis wie mit
len(q.fetch(limit))
zurückgegeben, allerdings effizienter.Argumente
- limit
- Die maximale Anzahl von Ergebnissen, die gezählt werden können.
- **q_options
- Alle Schlüsselwortargumente für Abfrageoptionen und Kontextoptionen werden unterstützt.
- count_async(limit, **q_options)
- Zählt die Anzahl der Abfrageergebnisse asynchron bis zu einem Grenzwert. Gibt ein Objekt vom Typ
Future
zurück, dessen Ergebnis eine Zahl ist. Dies ist die asynchrone Version von count(). - fetch(limit, **q_options)
- Ruft eine Liste von Abfrageergebnissen bis zu einem Limit ab
Argumente
- limit
- Die maximale Anzahl von Ergebnissen, die gezählt werden können.
- **q_options
- Alle Schlüsselwortargumente für Abfrageoptionen werden unterstützt.
- fetch_async(limit, **q_options)
- Ruft eine Liste von Abfrageergebnissen bis zu einem Grenzwert asynchron ab.
Gibt ein Objekt vom Typ
Future
zurück, dessen Ergebnis eine Ergebnisliste ist. Dies ist die asynchrone Version von fetch(). - fetch_page(page_size, **q_options)
- Ruft eine „Seite“ mit Ergebnissen ab. Dies ist eine spezielle Methode von Paging-Benutzerschnittstellen.
Argumente
- page_size
- Diese Anzahl von Ergebnissen wird maximal zurückgegeben.
- **q_options
- Alle Schlüsselwortargumente für Abfrageoptionen werden unterstützt.
(results, cursor, more)
zurück:- results: Liste mit Abfrageergebnissen
- cursor: Abfrage-Cursor, der auf den „nächsten“ Batch von Ergebnissen verweist. Wenn keine weiteren Ergebnisse vorhanden sind, lautet der Wert
None
. - more
bool
: Zeigt an, ob nach diesem Batch wahrscheinlich noch weitere Ergebnisse vorhanden sind. BeiFalse
gibt es keine weiteren Ergebnisse. BeiTrue
gibt es wahrscheinlich weitere Ergebnisse.
Wenn Sie die nächste Seite abrufen möchten, übergeben Sie mit
start_cursor=cursor
den von einem Aufruf zurückgegebenen Cursor an den nächsten Aufruf. Eine gängige Vorgehensweise besteht darin, den Cursor mitcursor.urlsafe()
an den Client zu übergeben und diesen Cursor bei einer nachfolgenden Anfrage mitCursor(urlsafe=string)
zu rekonstruieren. - fetch_page_async(page_size, **q_options)
- Ruft eine „Seite“ mit Ergebnissen asynchron ab. Dies ist die asynchrone Version von fetch_page().
- get_async(**q_options)
- Gibt das erste Abfrageergebnis asynchron zurück, falls vorhanden (andernfalls
None
). Dies ist die asynchrone Version von get(). - iter(**q_options)
- Konstruiert einen Iterator über die Abfrage und gibt ihn zurück
Argumente
- **q_options
- Alle Schlüsselwortargumente für Abfrageoptionen werden unterstützt.
Gibt ein QueryIterator-Objekt zurück.
- map(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
- Ordnet eine Callback-Funktion oder ein Tasklet über die Abfrageergebnisse zu. Dies bedeutet, dass die Funktion (oder das Tasklet) auf jede Entität in den Abfrageergebnissen angewendet wird.
Argumente
- callback
- Eine Funktion oder ein Tasklet, die bzw. das auf jedes Ergebnis angewendet werden soll
- pass_batch_into_callback
- Bei
True
wird der Callback mit Argumenten für Batchinformationen wie nachfolgend beschrieben aufgerufen. - merge_future
- Optionale abgeleitete
Future
-Klasse; siehe unten - **q_options
- Alle Schlüsselwortargumente für Abfrageoptionen werden unterstützt.
Rückrufsignatur: Die Rückrufsignatur wird normalerweise mit einer Entität als Argument aufgerufen. Gilt jedoch
keys_only=True
, wird sie mit einem Schlüssel (Key) aufgerufen. Wennpass_batch_into_callback=True
angegeben ist, wird der Callback mit drei Argumenten aufgerufen: dem aktuellen Batch, dem Index innerhalb des Batches und der Entität oder demKey
bei diesem Index. Der Rückgabe des Rückrufs ist beliebig. Wenn der CallbackNone
entspricht, wird von einem trivialen Callback ausgegangen, der lediglich die übergebene Entität oder den übergebenen Schlüssel zurückgibt.Optionales
merge_future
:merge_future
ist ein erweitertes Argument, mit dem Sie die Vorgehensweise beim Kombinieren der Callback-Ergebnisse zum Gesamtrückgabewertmap()
überschreiben können. Standardmäßig wird eine Liste von Rückgabewerten für den Callback erstellt. Wenn Sie eine Alternative einer geringen Anzahl von speziellen Alternativen ersetzen, können Sie eine andere Anordnung vornehmen. Die Standardimplementierung und eine Beschreibung des Protokolls, das dasmerge_future
-Objekt implementieren muss, finden Sie im Quellcode fürtasklets.MultiFuture
. Alternativen aus demselben Modul sindQueueFuture
,SerialQueueFuture
undReducingFuture
.Gibt eine Liste der Ergebnisse aller Rückrufe zurück. (Weitere Informationen finden Sie unter „Optionales
merge_future
“ oben.) Es wird zurückgegeben, wenn die Abfrage vollständig ausgeführt wurde und alle Rückrufe zurückgegeben wurden. - map_async(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
- Ordnet eine Callback-Funktion oder ein Tasklet asynchron über die Abfrageergebnisse zu. Dies ist die asynchrone Version von map().