Ich habe ein Problem, wo nach meiner mongodb Verbindung zu mongohq über pymongo für eine Weile im Leerlauf (keine Abfragen), wird es ein Timeout. Dies ist in Ordnung, aber die Verbindung der Datenbank wird nur erstellt, wenn die Django App gestartet wird. Es sieht so aus, als würde es sich wieder verbinden, aber es muss sich dann erneut authentifizieren. Wenn die Verbindung beendet und erneut verbunden ist und eine Abfrage versucht, ausgeführt wird, wird eine OperationFailure
ausgelöst und der folgende Ausnahmewert database error: unauthorized for db [shanereustle] lock type: -1
, der mir sagt, dass es erneut verbindet, aber nicht authentifizieren. Ich habe OperationFailure
von pymongo.errors
importiert und habe versucht, den folgenden Versuch zu verwenden ... außer, aber ich kann nicht scheinen, den Fehler zu fangen und zu authentifizieren.Wie bekomme ich ein OperationFailure von MongoDB und PyMongo in Python
try:
db.mongohq.shanereustle.blog.find()
except OperationFailure:
db.authenticate() #this function reauthenticates the existing connection
Aber aus irgendeinem Grund fängt dies nicht. Wenn ich anstelle dieses Codes einfach db.authenticate() vor der Abfrage ausführen möchte, wird es sich erneut authentifizieren, und zwar gut, aber ich möchte mich nicht bei jeder Abfrage erneut authentifizieren. Andere Vorschläge zu geeigneten Methoden sind sehr willkommen und ich schätze die Hilfe.
Danke!
Perfect! Nun, hier ist eine andere Sache, die ich nach der Implementierung bemerkt habe. Das erste Mal, wenn eine Abfrage ausgeführt wird, sobald die Verbindung beendet ist, wird AutoReconnect ausgelöst. Jede Seite danach löst OperationFailure aus. Kann ich es irgendwie versuchen, außer, außer? Ich könnte zuerst nach dem AutoReconnect suchen und dann nach dem OperationFailure? Vielen Dank! –
Update: Sie können mehrere Ausnahmen verwenden, zB: 'except (AutoReconnect, OperationFailure):' –