2012-04-09 12 views
1

Ich mache eine NDB-Abfrage, die anscheinend nur ein Teilobjekt holt. Für das Model habe ich das Caching deaktiviert, falls das der Fall war. Einige Eigenschaften werden jedoch mit None zurückgegeben, wenn ich sie im Datastore Viewer sehen kann.NDB Abfrage, die kein vollständiges Objekt zurückgibt

Dies ist mit dem lokalen Entwicklungsserver (und bereitgestellt), und die Abfrage wird von einem Back-End-Prozess durchgeführt.

Hinweis: Das Löschen des Memcache hat nicht geholfen.

HINWEIS: Wenn das Backend neu gestartet wird, werden die richtigen Daten abgerufen.

Grundsätzlich gilt:

Backend startet für Instanzen eines Modells Abfrage alle X Sekunden

Frontend bewirkt eine Änderung auf eine Instanz des Modells

Backend weiterhin die ursprüngliche Version der Instanz, um zu sehen, bis Neustart

Backend-Code ist ziemlich einfach:

while 1: 
    time.sleep(2) 
    q = None 
    res = None 
    q = core.Agent.query() 
    res = q.fetch(10) 
    for a in res: 
     logging.error("%s" % a.to_dict()) 

Das Frontend ändert einige Eigenschaften (und es wird im Viewer angezeigt), aber das Backend zeigt nur alte Werte an. Es scheint auch so, als würde ein Filter auf korrekten Werten filtern, aber fetch() gibt altes Zeug zurück.

+0

Sind Sie ziemlich sicher, dass das Frontend die Eigenschaften bestehender Entitäten ändert und keine neuen Entitäten erstellt? (Wenn es versehentlich neue Entitäten erstellt hat, könnte das erklären, warum Sie neue Werte sehen, aber Ihr Programm sah alte Werte.) Vielleicht könnten Sie den Code anzeigen, der die Entitäten bearbeitet? (Oder sagen Sie einfach "Nein, ich habe überprüft und das passiert nicht.") –

+0

Ich sehe nur die geänderten Entitäten im Datastore Viewer (nur 2 Entitäten für meine Tests) –

+0

Sind Sie sicher, dass es keinen Sinn mehr macht, die Aufgabe zu verwenden Warteschlange? Sie könnten eine Aufgabe aus dem Frontend einfügen, wenn die Entität geändert wird, anstatt eine Backend-Abfrage nach Änderungen durchzuführen. –

Antwort

1

Sie müssen den Kontextcache am Anfang der Schleife löschen, z.

while 1: 
    ndb.get_context().clear_cache() 
    <rest of your code> 
Verwandte Themen