2012-12-20 10 views
8

जैसा कि यहाँ दिखाया मैं बोतल के साथ SQLAlchemy उपयोग कर रहा हूँ: http://flask.pocoo.org/docs/patterns/sqlalchemy/बोतल के साथ SQLAlchemy डीबी सत्र, Postgres

मैं एक सेलेनियम टेस्ट स्वीट कि पहले Firefox के साथ और फिर क्रोम के साथ चलता है की है।

प्रत्येक ब्राउज़र पर परीक्षण शुरू करने से पहले, परीक्षण डेटाबेस (PostgreSQL) में तालिकाएं गिरा दी जाती हैं और बनाई जाती हैं।

यह पहले ब्राउज़र के लिए पूरी तरह से चलता है, लेकिन दूसरे ब्राउज़र के लिए एसक्यूएल बनाने/ड्रॉप प्रयास बस फ्रीज करता है और कोई त्रुटि दिखाई नहीं देती है।

मुझे विश्वास है कि यह खुले SQLAlchemy सत्रों के कारण है, क्या यह सही है?

+2

यहां स्टैक ट्रेस डालें –

उत्तर

3

मेरा मानना ​​है कि यह खुले SQLAlchemy सत्रों के कारण है, क्या यह सही है?

यह सबसे अधिक संभावना है। इसकी पुष्टि करने के लिए, postgres डेटाबेस से कनेक्ट करें और SELECT * FROM pg_stat_activity चलाएं;

मुझे यकीन है कि तुम कैसे डीबी निर्माण संभाल/छोड़ने नहीं कर रहा हूँ, लेकिन आप, कनेक्शन पूल SQLAlchemy पर dispose() और संभवतः recreate() कॉल करने के लिए (उदाहरण के लिए कि किसी भी कनेक्शन की जाँच की लौटा दिया गया है यह सुनिश्चित करने के बाद, session.close() साथ चाहते हो सकता है)।

+0

मेरे लिए एक अस्थायी समाधान लेनदेन को अक्षम करना था i.e. autocommit = True' 'इंजन' पैरामीटर के रूप में। – Sri

+0

दिलचस्प। मुझे लगता है कि ऑटोकॉमिट के साथ सत्र पूल को तुरंत कनेक्शन देता है। मुझे लगता है कि लगातार दो परीक्षणों के बीच, आपका इंजन और पूल कचरा इकट्ठा किया गया है, है ना? तब इसका मतलब यह होगा कि आपके इंजन को नष्ट होने पर आपके पास एक या अधिक खुले लेन-देन होते हैं, जिनमें से प्रत्येक पीजी सर्वर के लिए कनेक्शन खोलता है। –

0

यह ऐसा कुछ है जो मुझे स्क्लाक्लेमी और पोस्टग्रेस के साथ फ्लास्क को चलाने पर भी होता है। कई बार, अपराधी एक अपवाद है, जो ऊपर की ओर प्रचार नहीं करता और अटक गया। यह अपवाद भी परीक्षण को ठीक से साफ करने से रोकता है और इसलिए फ्रीज।

यदि आप एक परीक्षण सूट बना रहे हैं तो सूट पर डीबग विधि कॉल करें और यह अपवाद दिखाएगा। इस विधि के दस्तावेज़ों को here से लिंक किया गया।

खुले स्क्लेल्चेमी सत्र का आपका अवलोकन भी एक कारण हो सकता है। मैं कल इस अवलोकन के आधार पर मेरा एक सिद्धांत का परीक्षण करूंगा। अगर यह कुछ संदेह साफ़ करता है तो मैं यहां पोस्ट करूंगा।

यह answer देखें जो दिखाता है कि आप अपवाद पर डीबगर कैसे ट्रिगर कर सकते हैं। शायद यह समस्या को दूर करने में मदद कर सकता है।

+0

मेरे लिए यह एक खुला लेनदेन था। मेरे 'इंजन' पर 'autocommit = True' का उपयोग करके मूल रूप से पोस्टग्रेज़ पर लेनदेन के माध्यम से काम नहीं कर रहा है। सुनिश्चित नहीं है कि यह एक दीर्घकालिक समाधान है। आपके आवेदन के आधार पर – Sri

+0

'autocommit = True' आपके डेटा की स्थिरता समझौता कर सकता है। –

संबंधित मुद्दे