BadArgumentError: _MultiQuery mit Cursorn erfordert __key__ order in ndb

8

Ich kann nicht verstehen, was dieser Fehler bedeutet und anscheinend hat niemand den gleichen Fehler im Internet bekommen

  

BadArgumentError: _MultiQuery mit Cursors erfordert __key__ order

Das passiert hier:

%Vor%

Die Eigenschaft source_key ist offensichtlich ein Schlüssel und nodes_list ist eine Liste der zuvor abgerufenen Entitätsschlüssel.

Was ich brauche, ist, alle SocialNotifications zu finden, die ein Feld source_key haben, das mit einem der Schlüssel in der Liste übereinstimmt.

    
Chobeat 16.09.2012, 17:45
quelle

4 Antworten

18

Die Fehlermeldung versucht Ihnen mitzuteilen, dass Abfragen, die IN und Cursor betreffen, von __key__ (dem internen Namen für den Schlüssel der Entität) angeordnet werden müssen. (Dies ist erforderlich, damit die Ergebnisse ordnungsgemäß zusammengeführt und eindeutig gemacht werden können.) In diesem Fall müssen Sie Ihren .order() -Aufruf durch .order(SocialNotification._key) ersetzen.

    
Guido van Rossum 16.09.2012, 23:04
quelle
3

Es scheint, dass dies auch passiert, wenn Sie nach einer Ungleichung filtern und versuchen, eine Seite zu holen. (zB MyModel.query(MyModel.prop != 'value').fetch_page(...) . Das bedeutet grundsätzlich (wenn ich etwas nicht verpasst habe), dass Sie fetch_page nicht verwenden können, wenn Sie einen Ungleichheitsfilter verwenden, da einerseits die Sortierung MyModel.prop sein muss, andererseits aber MyModel._key , was schwer ist:)

    
s.shpiz 17.09.2012 20:31
quelle
3

Ich habe die Antwort hier gefunden: Ссылка

Sie können Ihre Abfrage ändern in:

SocialNotification.query().order(-SocialNotification.date, SocialNotification.key).filter(SocialNotification.source_key.IN(nodes_list)).fetch_page(10)

um dies zum Laufen zu bringen. Beachten Sie, dass es langsam zu sein scheint (18 Sekunden), wenn nodes_list groß ist (1000 Entitäten), zumindest auf dem Entwicklungsserver. Ich habe nicht viel Test Daten auf einem Testserver.

    
Dylan 19.10.2012 03:00
quelle
0

Ich hatte den gleichen Fehler beim Filtern ohne eine Gruppe. Der Fehler ist jedes Mal aufgetreten, wenn mein Filter mehr als ein Ergebnis zurückgegeben hat.

Um es zu beheben, musste ich hinzufügen nach dem Schlüssel sortieren.

    
maxandron 12.09.2015 15:35
quelle