我一直在遇到一个问题,在我通过Pymongo连接到Mongohq之后,我会闲置一段时间(无查询),它将超时。这很好,但是仅在启动Django应用程序时创建数据库的连接。似乎它重新连接正常,但是需要重新验证。当连接死亡并重新连接时,查询试图运行时,它会增加 OperationFailure 以及以下异常值 database error: unauthorized for db [shanereustle] lock type: -1 这告诉我它是重新连接的,但没有认证。我已经进口了 OperationFailurepymongo.errors 并一直在尝试使用以下尝试...除了我似乎无法捕获错误,并进行了身份验证。

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

但是由于某种原因,这不会抓住。如果不是此代码,我只需在查询之前运行db.authenticate(),它将重新验证正常并顺利进行,但是我不想在每个查询中重新验证。关于做到这一点的正确方法的其他建议非常欢迎,感谢您的帮助。

谢谢!

有帮助吗?

解决方案

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

我只是使用一个数据库尝试了一下,它起作用了:

try:
  connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
  print "caught"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top