2010-08-09 7 views
6

pongongo를 통해 mongohq에 연결 한 후 잠시 동안 아무런 쿼리도하지 않으면 문제가 발생하여 시간이 초과됩니다. 괜찮지 만 데이터베이스 연결은 Django 앱이 시작될 때만 생성됩니다. 다시 연결하는 것처럼 보이지만 재 인증해야합니다. 연결이 끊어져 다시 연결될 때 쿼리가 실행을 시도하면 OperationFailure이 발생하고 다시 연결되지만 인증되지는 않는다는 예외 값 database error: unauthorized for db [shanereustle] lock type: -1가 발생합니다. 나는 을 pymongo.errors에서 가져 왔고 다음 try ... except를 사용하려고 시도했지만 오류를 잡아 내지 못하는 것 같습니다.MongoDB와 PyMongo에서 Python으로 OperationFailure를 잡는 방법

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

하지만 어떤 이유로이 사실을 포착하지 못합니다. 이 코드 대신에 단순히 쿼리 전에 db.authenticate()를 실행하면 잘 인증되고 잘 처리되지만 모든 쿼리를 다시 인증하지 않으려 고합니다. 이 작업을 수행 할 수있는 적절한 방법에 대한 다른 제안은 매우 환영하며 도움을 주셔서 감사합니다.

감사합니다.

답변

6

find() 대신 find_one()을 시도해 볼 수 있습니까? 후자는 자동으로 커서를 반복하지 않습니다.

나는 단지 --auth 데이터베이스와이 시도, 그것은 일 :

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

완벽! 이제, 이것을 구현 한 후에 제가 눈치 챘을 또 다른 점이 있습니다. 일단 연결이 끊어지면 쿼리가 실행 된 처음에는 AutoReconnect가 발생합니다. 그 후 모든 페이지는 OperationFailure를 발생시킵니다. 예외를 제외하고 시도 할 수있는 방법이 있습니까? 먼저 AutoReconnect를 확인한 다음 OperationFailure를 확인할 수 있습니까? 감사! –

+3

업데이트 : 여러 예외를 사용할 수 있습니다. 예 :'except (AutoReconnect, OperationFailure) :' –