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

时间:2010-08-09 16:52:11

标签: python django mongodb pymongo

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:6)

您可以尝试使用find_one()而不是find()。后者不会自动迭代光标。

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

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