我遇到了一个问题,在我的mongodb通过pymongo与mongohq连接闲置一段时间后(没有查询),它会超时.这很好,但只有在启动Django应用程序时才会创建数据库的连接.好像它重新连接正常,但它需要重新认证.当连接已经死亡并重新连接,并且查询尝试运行时,它会引发一个OperationFailure
和以下异常值database error: unauthorized for db [shanereustle] lock type: -1
,该值告诉我它正在重新连接,但不进行身份验证.我有进口OperationFailure
自pymongo.errors
并已尝试使用以下try ...除了,但我似乎无法捕获错误,并进行身份验证.
try: db.mongohq.shanereustle.blog.find() except OperationFailure: db.authenticate() #this function reauthenticates the existing connection
但由于某种原因,这并没有抓住.如果不是这个代码,我只是在查询之前运行db.authenticate(),它将重新进行验证并且正常,但我不想在每个查询上重新验证.关于正确方法的其他建议非常受欢迎,我很感激帮助.
谢谢!
你可以试试find_one()而不是find().后者不会自动迭代光标.
我只是尝试使用--auth数据库,它工作:
try: connection.test.foo.find_one() except pymongo.errors.OperationFailure: print "caught"