Come catturare un'operazione da MongoDB e PyMongo in Python
Domanda
Ho avuto un problema in cui dopo la mia connessione MongoDB a Mongohq tramite Pymongo va inattiva per un po '(nessuna domanda), sarà timeout. Questo va bene, ma la connessione il database viene creata solo quando l'app Django viene avviata. Sembra che si stia riconnettendo bene, ma allora deve riautentare. Quando la connessione è morta e ricollegata e una domanda cerca di correre, aumenta un OperationFailure
e il seguente valore di eccezione database error: unauthorized for db [shanereustle] lock type: -1
Il che mi dice che sta riconnettendo, ma non autentica. Ho importato OperationFailure
da pymongo.errors
E ho provato a usare il seguente tentativo ... tranne ma non riesco a catturare l'errore e autenticare.
try:
db.mongohq.shanereustle.blog.find()
except OperationFailure:
db.authenticate() #this function reauthenticates the existing connection
Ma per qualche motivo questo non cattura. Se al posto di questo codice, eseguo semplicemente db.authenicat () prima della query, riautenci bene e andrà bene, ma non voglio riautenicare su ogni query. Altri suggerimenti sui modi adeguati per farlo sono molto benvenuti e apprezzo l'aiuto.
Grazie!
Soluzione
Puoi provare un fint_one () invece di fint (). Quest'ultimo non ripete automaticamente sul cursore.
L'ho appena provato con un database -auth e ha funzionato:
try:
connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
print "caught"