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

Nem*_*emo 13 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
Run Code Online (Sandbox Code Playgroud)

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

Roc*_*key 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
Run Code Online (Sandbox Code Playgroud)

如果您不关心连接并且只是想测试查询的执行,我想您可以将连接设置保留在您的异常之外,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
Run Code Online (Sandbox Code Playgroud)

这至少可以为您提供更详细的原因,说明它失败的原因.


Joh*_*Mee 3

是的。在我看来很好。

我的个人喜好:

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