2012-07-31 6 views
6

मैं MySQLdb लाइब्रेरी के माध्यम से अजगर से MySQL डेटाबेस तक पहुंच रहा हूं। मैं नीचे दिखाए गए डेटाबेस कनेक्शन का परीक्षण करने का प्रयास कर रहा हूं।पायथन में डेटाबेस कनेक्टिविटी का परीक्षण कैसे करें?

db = MySQLdb.connect(self.server, self.user, 
        self.passwd, self.schema) 
cursor = db.cursor()   
try: 
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    ver = results[0] 
    if (ver is None): 
     return False 
    else: 
     return True    
except: 
    print "ERROR IN CONNECTION" 
    return False 

इस सही तरीके से जब इकाई testcases लेखन एक कनेक्टिविटी का परीक्षण करना चाहिए है? यदि कोई बेहतर तरीका है, तो कृपया प्रबुद्ध करें!

+0

कोड में त्रुटि को सही किया गया। यह जानने की आवश्यकता है कि यह परीक्षण करने का सही तरीका है या नहीं? – Nemo

+0

* क्यों * आप * कनेक्ट * कनेक्टिविटी करना चाहते हैं? परीक्षण विफल होने पर आप क्या करते हैं? –

+0

मैं डीबी एक्सेस विधियों के लिए यूनिट टेस्टकेस लिख रहा हूं। इसलिए जब डेटाबेस पहुंच विफल हो जाती है तो मामले को बाहर निकालना चाहते हैं। – Nemo

उत्तर

1

हां। मुझे ठीक लगता है।

मेरे व्यक्तिगत वरीयताओं:

  • वास्तव में एक अपवाद फेंक अगर कोई संबंध नहीं
  • आप केवल fetchone की जरूरत है, कोई नहीं के लिए परीक्षण ज़रूरत से ज़्यादा है (जब तक आप डेटाबेस की एक न्यूनतम संस्करण को लागू करने के लिए उत्सुक हैं)
+0

मुझे नहीं मिला कि यह क्यों अनिवार्य है। क्या आप कृपया विस्तार से बता सकते हैं या बता सकते हैं कि आपने इसे कैसे कोड किया होगा? – Nemo

+0

कोई परिणाम नहीं होने पर "परिणाम" कोई नहीं होगा। आपको शायद कोई अन्य अपवाद नहीं मिलेगा जब परिणाम "[0]" करने की कोशिश कर रहे हों। कोशिश करो! –

8

मैं गलत हो सकता हूं (या आपके प्रश्न को गलत व्याख्या कर रहा हूं :)), लेकिन मेरा मानना ​​है कि कनेक्शन से संबंधित अपवाद MySQLdb.connect() पर फेंक दिया गया है। MySQLdb के साथ, पकड़ने का अपवाद MySQLdb.Error है। इसलिए, मैं try ब्लॉक के अंदर db सेटअप को स्थानांतरित करने और उचित अपवाद (MySQLdb.Error) को पकड़ने का सुझाव दूंगा। इसके अलावा, जैसा @JohnMee का उल्लेख है, fetchone() कोई भी अगर वहाँ कोई परिणाम नहीं हैं वापस आ जाएगी, तो यह काम करना चाहिए:

try: 
    db = MySQLdb.connect(self.server, self.user, 
         self.passwd, self.schema) 
    cursor = db.cursor()   
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    # Check if anything at all is returned 
    if results: 
     return True 
    else: 
     return False    
except MySQLdb.Error: 
    print "ERROR IN CONNECTION" 
return False 

आप कनेक्शन के बारे में परवाह नहीं है और सिर्फ क्वेरी के निष्पादन का परीक्षण करने के लिए देख रहे हैं, मुझे लगता है कि आप अपने अपवाद में try बाहर कनेक्शन सेटअप छोड़ सकता लेकिन शामिल MySQLdb.Error, इस प्रकार है शायद के रूप में:

db = MySQLdb.connect(self.server, self.user, 
        self.passwd, self.schema) 
cursor = db.cursor() 

try: 
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    # Check if anything at all is returned 
    if results: 
     return True 
    else: 
     return False    
except MySQLdb.Error, e: 
    print "ERROR %d IN CONNECTION: %s" % (e.args[0], e.args[1]) 
return False 

यह कम से कम आप क्यों यह असफल के एक अधिक विस्तृत कारण देना होगा।

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