2010-02-18 12 views
7

Python'u MySQL ve Django ile kullanıyorum. Bu hatayı görmeye devam ve ben istisnası atılır nerede bilemiyorum:Bu MySQL Özel Durumunu kim atıyor (ve yakalıyor)?

Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x20108150>> ignored

Ben birçok benim kodunda ve "istisna" bloklar "dene" - eğer istisna bunlardan birinde meydana geldi, sonra kendi hata ayıklama mesajlarını görecektim. Yukarıdaki İstisna programın İstisna atıldığında iptal edilmemesi nedeniyle bir yerlerde yakalanıyor.

Çok şaşırdım, birisi bana yardım edebilir mi?

cevap

3

Bu bir Python Hatası.

görme: MySQLdb Query ile ilgili bir sorun gibi görünüyor http://eric.lubow.org/2009/python/pythons-mysqldb-2014-error-commands-out-of-sync/

.

+1

Bağlantı için teşekkürler. Açık bir MySQL sorgusu kullanmıyorum veya imleç nesneleri kullanmıyorum. Django nesneleri üzerinden yaptığım tüm sorgular. Benim için büyük bir sorun, bu istisnanın nereye atıldığını göremiyor. –

+0

Devam ediyor: php'de olduğu gibi, önce bir tane kapatmadan ikinci bir mysql bağlantısı açamazsınız! –

2

Birden çok ileti dizisinden aynı bağlantıyı/imleci kullanıyorsanız bu hatanın oluşabileceğine inanıyorum. Ancak, Django'nun yaratıcılarının böyle bir hata yaptığını düşünmüyorum, ancak kendi başınıza bir şey yapıyorsanız kolayca gerçekleşebilir.

+0

Programımda çok iş parçacığım yok, ayrıca programımın yalnızca bir örneği çalışıyor. Programım çalışırken veritabanına erişen tek kişi olmalıydım. Özel durumun nereye atılacağını görmek için herhangi bir hata ayıklama tekniği var mı? Programım büyük bir set verisi üzerinde çalışacak şekilde ayarlanmış. Sadece küçük bir veri kümesini test edersem, her şey yolunda. Ama tüm sette çalışacak şekilde ayarladığımda, bu MySQL istisnası ortaya çıkıyor ... Şu anda, tüm seti çalıştırıyorum ve hem standartta hem de standart hatalarla çalışıyorum. Sorun ortaya çıkıyor. –

2

Bir sürü malzeme ve hata ayıklama yazdırdıktan sonra, düşündüğüm sorunu çözdüm. Kullandığım kitaplıklardan biri bağlantıyı veya imleci kapatmadı. Ancak bu sorun sadece büyük miktarda veriyle tekrar edersem ortaya çıkar. Sorun da çok aralıklıdır ve hala "senkronizasyondan çık" komutunu kimin attığını bilmiyorum. Ama şimdi hem bağlantıyı hem de imleci kapattık, artık hataları göremiyorum.

4

Tam olarak bu hatayı (MySQLdb ve Django kullanarak) buldum ve "yok sayılma" nedeninin __del__ yönteminde gerçekleştiğini fark ettim. object.__del__ datamodel

ayrıca (en azından this thread göre) yığın kadar onu yakalamak için herhangi bir yol olarak görünmüyor, ancak MySQLdb/cursors.py veya monkey- düzenleyebilirsiniz: __del__ yılında İstisnalar kategorik göz ardı edilir oraya özel __del__ almak için yama, istisnai yakalar ve bir pdb istemine girer veya tam bir geri izleme günlüğe kaydeder.

+0

Nihayetinde sizin için hataya neden olan belirli bir kodu belirlediniz mi? Ben mysql, yaygın bir modül veya özellikle benim kod içinde mysql kullanımı ile ilgili belirli bir sorun olup olmadığını merak ediyorum. –

+1

Kök sorunu tamamen benim hatamdı (iş parçacıkları arasında bir db bağlantısı paylaşılıyordu) ve sonuç kümesini temizlemeye çalışırken bağlantıyı kapatırken istisna gerçekleşir. Django'nun meseledeki tek suçu, her zamanki gibi, uzaktan beklenmedik bir şey olduğunda hata ayıklamayı imkânsız kılıyordu. –

İlgili konular