当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中从MongoDB和PyMongo捕获OperationFailure

如何解决《如何在Python中从MongoDB和PyMongo捕获OperationFailure》经验,为你挑选了1个好方法。

我遇到了一个问题,在我的mongodb通过pymongo与mongohq连接闲置一段时间后(没有查询),它会超时.这很好,但只有在启动Django应用程序时才会创建数据库的连接.好像它重新连接正常,但它需要重新认证.当连接已经死亡并重新连接,并且查询尝试运行时,它会引发一个OperationFailure和以下异常值database error: unauthorized for db [shanereustle] lock type: -1,该值告诉我它正在重新连接,但不进行身份验证.我有进口OperationFailurepymongo.errors并已尝试使用以下try ...除了,但我似乎无法捕获错误,并进行身份验证.

try:
    db.mongohq.shanereustle.blog.find()
except OperationFailure:
    db.authenticate() #this function reauthenticates the existing connection

但由于某种原因,这并没有抓住.如果不是这个代码,我只是在查询之前运行db.authenticate(),它将重新进行验证并且正常,但我不想在每个查询上重新验证.关于正确方法的其他建议非常受欢迎,我很感激帮助.

谢谢!



1> Kyle Banker..:

你可以试试find_one()而不是find().后者不会自动迭代光标.

我只是尝试使用--auth数据库,它工作:

try:
  connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
  print "caught"


更新:您可以使用多个例外,例如:`except(AutoReconnect,OperationFailure):`
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有