2012-07-31 71 views
6

我正在通過MySQLdb庫從python訪問MySQL數據庫。我試圖測試數據庫連接,如下所示。如何在python中測試數據庫連接?

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 

這是編寫測試用例單位時,應該測試連接的正確方法?如果有更好的方法,請指教!

+0

更正了代碼中的錯誤。需要知道這是否是正確的測試方法? – Nemo 2012-07-31 07:41:35

+0

*爲什麼*你想*測試*連接?如果測試失敗,你會怎麼做? – 2012-07-31 07:42:29

+0

我正在寫數據庫訪問方法的單元測試用例。所以想在數據庫訪問失敗的時候去除這種情況。 – Nemo 2012-07-31 07:43:28

回答

1

是的。在我看來很好。

我的個人喜好:

  • 居然拋出一個異常,如果沒有連接
  • 你只需要fetchone,測試爲無是多餘的(除非你是熱衷於加強數據庫的最低版本)
+0

我沒有明白爲什麼它是多餘的。你能否詳細說明或指出你將如何編碼?當沒有連接時, – Nemo 2012-07-31 07:57:51

+0

「結果」將爲無。當它的None時,你可能會得到一些其他異常,試圖做「結果[0]」。嘗試一下! – 2012-07-31 08:01:34

8

我可能是錯的(或誤解你的問題:)),但我相信一個連接相關的異常被拋出MySQLdb.connect()。對於MySQLdb,捕獲的例外是MySQLdb.Error。因此,我建議移動try區塊內的db安裝程序,並捕獲適當的異常(MySQLdb.Error)。此外,作爲@JohnMee提到,fetchone()返回None如果沒有結果,所以這應該工作:

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 

這將至少給你失敗的原因更詳細的原因。