2012-07-31 25 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 

这将至少给你失败的原因更详细的原因。