【问题标题】:How to test database connectivity in python?如何在python中测试数据库连接?
【发布时间】:2012-07-28 22:33:20
【问题描述】:

我正在通过 MySQLdb 库从 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

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

【问题讨论】:

  • 更正了代码中的错误。想知道这是否是正确的测试方法?
  • 为什么您要测试连接性?如果测试失败了怎么办?
  • 我正在为数据库访问方法编写单元测试用例。所以想排除数据库访问失败的情况。
  • 恶心,除了抓人外,光秃秃的。难道没有更具体的异常可以被抛出吗?

标签: python mysql-python


【解决方案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

这至少会给你一个更详细的失败原因。

【讨论】:

    【解决方案2】:

    是的。我觉得不错。

    我的个人喜好:

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

    【讨论】:

    • 我不明白为什么它是多余的。您能否详细说明或指出您将如何编码?
    • "results" 将在没有连接时为空。当它为 None 时,您可能会尝试执行“results[0]”时遇到其他一些异常。试试看!
    • 我喜欢手动抛出异常的想法。扔哪一个?大声笑
    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    相关资源
    最近更新 更多