couchdb-python Änderungsbenachrichtigungen

8

Ich versuche mit couchdb.py Datenbanken zu erstellen und zu aktualisieren. Ich möchte Benachrichtigungen ändern, vorzugsweise im kontinuierlichen Modus. Wenn ich den unten stehenden Testcode ausführe, sehe ich nicht, wie das Änderungsschema in Python funktioniert.

%Vor%

Der Wert

%Vor%

gibt Informationen zurück, die von Interesse sind, aber in einem Format, aus dem ich nicht herausgefunden habe, wie die Sequenz- oder Revisionsnummern oder die Dokumentinformationen extrahiert werden sollen:

%Vor%

Der Code, an dem ich wirklich interessiert bin, ist:

%Vor%

Gibt ein Generatorobjekt zurück und scheint keine Benachrichtigungen zu geben, wie sie im CouchDB erscheinen schlägt vor ....

Hat jemand Änderungen in Couchdb-Python erfolgreich verwendet?

    
radpotato 20.10.2011, 18:23
quelle

2 Antworten

7

Ich benutze lange Polling statt Continuous, und das funktioniert ok für mich. Im langen Abfragemodus db.changes blockiert, bis mindestens eine Änderung eingetreten ist, und gibt dann alle Änderungen in einem Generatorobjekt zurück.

Hier ist der Code, mit dem ich Änderungen bearbeite. settings.db ist mein CouchDB Datenbank Objekt.

%Vor%

Wie Sie sehen können, ist es eine Endlosschleife, bei der wir bei jeder Iteration changes aufrufen. Der Aufruf von changes gibt ein Dictionary mit zwei Elementen zurück, die Sequenznummer des letzten Updates und die Objekte, die geändert wurden. Ich durchlaufe dann jedes Ergebnis, das das passende Objekt lädt und verarbeitet.

Verwenden Sie für einen kontinuierlichen Feed anstelle der while True: -Zeile for changes in settings.db.changes(feed="continuous", since=since) .

    
Andrew Wilkinson 26.10.2011 15:36
quelle
4

Ich habe einen Mailpooler eingerichtet, der etwas Ähnliches verwendet. Sie müssen auch couchdb.Session () laden. Ich verwende auch einen Filter, um nur ungesendete E-Mails an den Spooler-Änderungs-Feed zu senden.

%Vor%

Damit können Sie direkt über den Änderungs-Feed auf Ihr Dokument zugreifen, Ihre Daten nach Belieben bearbeiten und schließlich Ihr Dokument aktualisieren. Ich verwende einen try / except-Block für das eigentliche 'db.save (doc)', damit ich feststellen kann, wann ein Dokument während der Bearbeitung aktualisiert wurde und das Dokument vor dem Speichern neu geladen wurde.

    
Jerry W Jackson 09.03.2012 11:14
quelle

Tags und Links