7

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

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

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

谢谢!

4

1 回答 1

7

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

我刚刚用 --auth 数据库尝试了这个,它起作用了:

try:
  connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
  print "caught"
于 2010-08-09T17:56:18.283 回答