如何在python中测试数据库连接?

时间:2012-07-31 07:38:35

标签: python mysql-python

我通过My​​SQLdb库从python访问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

在编写单元测试用例时,这是否应该测试连接性的正确方法?如果有更好的方法,请指教!

2 个答案:

答案 0 :(得分:8)

我可能是错的(或误解了你的问题:)),但我相信在MySQLdb.connect()上会抛出与连接相关的异常。使用MySQLdb时,捕获的异常是MySQLdb.Error。因此,我建议移动db块内的try设置并捕获正确的异常(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

这至少可以让你更详细地了解它失败的原因。

答案 1 :(得分:2)

是。对我来说很好看。

我的个人偏好:

  • 如果没有连接,实际上会抛出异常
  • 你只需要fetchone,对None的测试是多余的(除非你热衷于强制执行数据库的最低版本)