我通过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
在编写单元测试用例时,这是否应该测试连接性的正确方法?如果有更好的方法,请指教!
答案 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)
是。对我来说很好看。
我的个人偏好: