我遇到了一个问题,在我通过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(),它将重新进行验证并且正常,但我不想在每个查询上重新验证。关于正确方法的其他建议非常受欢迎,我很感激帮助。
谢谢!
答案 0 :(得分:6)
您可以尝试使用find_one()而不是find()。后者不会自动迭代光标。
我只是尝试使用--auth数据库,它起作用了:
try:
connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
print "caught"