如何在Python测试数据库连接?(How to test database connectivit

2019-07-30 16:43发布

我通过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

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

Answer 1:

我可能是错的(或误解你的问题:)),但我相信在连接相关的异常被扔在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

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



Answer 2:

是。 在我看来很好。

我的个人喜好:

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


文章来源: How to test database connectivity in python?