Comment attraper une opération de MongoDB et Pymongo à Python
Question
J'ai eu un problème où, après ma connexion MongoDB avec MongohQ via Pymongo, devient inactif pendant un certain temps (pas de questions), ce sera le temps mort. C'est bien, mais la connexion La base de données n'est créée que lorsque l'application Django est démarrée. Il semble que cela se reconnecte bien, mais il doit alors réactiver. Lorsque la connexion est morte et reconnectée, et qu'une requête essaie de courir, elle soulève un OperationFailure
et la valeur d'exception suivante database error: unauthorized for db [shanereustle] lock type: -1
Ce qui me dit qu'il reconnecte, mais ne s'authentifie pas. J'ai importé OperationFailure
de pymongo.errors
et j'ai essayé d'utiliser l'essai suivant ... sauf mais je n'arrive pas à attraper l'erreur et à s'authentifier.
try:
db.mongohq.shanereustle.blog.find()
except OperationFailure:
db.authenticate() #this function reauthenticates the existing connection
Mais pour une raison quelconque, cela ne s'attrape pas. Si au lieu de ce code, j'exécute simplement DB.AuthentiCate () Avant la requête, il va bien réautoriser et va bien, mais je ne veux pas réauthentifier chaque requête. D'autres suggestions sur les bonnes façons de le faire sont les bienvenues et j'apprécie l'aide.
Merci!
La solution
Pouvez-vous essayer un find_one () au lieu de find (). Ce dernier n'imagine pas automatiquement le curseur.
Je viens d'essayer avec une base de données - Auth, et cela a fonctionné:
try:
connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
print "caught"