2010-08-09 15 views
6

Pongongq aracılığıyla mongohq bağlantımın bir süre boşta kaldığı (sorgu yok), zaman aşımına uğradığı bir sorunla karşılaşıyorum. Bu iyi, ancak veritabanı bağlantısı sadece Django uygulaması başlatıldığında oluşturulur. İyi bir şekilde yeniden bağlanıyor gibi görünüyor, ama sonra yeniden doğrulamak gerekiyor. Bağlantı öldü ve yeniden bağlandığında ve bir sorgu çalışmayı denediğinde, OperationFailure ve aşağıdaki özelleştirme değerini database error: unauthorized for db [shanereustle] lock type: -1 yükseltir, ancak yeniden kimlik doğrulaması yapılmadığını söyler. pymongo.errors'dan OperationFailure'u aldım ve şu denemeyi denedim ... hariç, ancak hatayı yakalayamıyorum ve kimlik doğrulaması yapamıyorum.Python'da MongoDB ve PyMongo'dan bir OperationFailure nasıl yakalanır

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

Ancak bazı nedenlerden dolayı bu durum yakalanmaz. Bu kod yerine, yalnızca db.authenticate() 'ı sorgulamadan önce çalıştırıyorum, doğru olarak yeniden kimlik doğrulaması yapar ve iyi çalışır, ancak her sorguda yeniden kimlik doğrulaması yapmak istemiyorum. Bunu yapmak için uygun yollar hakkında diğer öneriler çok açıktır ve yardım için teşekkür ederim.

Teşekkürler!

cevap

6

find() yerine find_one() yöntemini deneyebilir misiniz? İkincisi, imleci otomatik olarak tekrarlamaz.

Ben sadece bir --auth veritabanı ile bu denenmiş ve işe yaradı:

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

Mükemmel! Şimdi, bunu uyguladıktan sonra fark ettiğim başka bir şey var. Bağlantı kurulduktan sonra ilk kez bir sorgu çalıştırıldığında, Otomatik Yanıt'ı yükseltir. Bundan sonraki her sayfa OperationFailure'ı yükseltir. Bir şey hariç, yapabileceğim herhangi bir yol var mı? Önce AutoReconnect'i ve sonra OperationFailure'ı kontrol edebilir miyim? Teşekkürler! –

+3

Güncelleme: Birden çok özel durum kullanabilirsiniz, örneğin: 'haricinde (Otomatik Yanıt, ÇalıştırmaFailure):' –

İlgili konular