def connectdb():
name = "db" + hashlib.md5(str(time.time())).hexdigest()[0:4]
db = QtSql.QSqlDatabase.addDatabase("QMYSQL", name)
db.setHostName(dbcfg['server']);
db.setPort(dbcfg['port'])
db.setDatabaseName(dbcfg['dbname'])
db.setUserName(dbcfg['dbuser'])
db.setPassword(dbcfg['dbpw'])
db.setConnectOptions("CLIENT_COMPRESS=1;MYSQL_OPT_RECONNECT=1;")
dbstatus = db1.open()
if not dbstatus:
return None
else:
return db
这是一段连接到MYSQL数据库的函数
这里要指出的是
db.setConnectOptions("CLIENT_COMPRESS=1;MYSQL_OPT_RECONNECT=1;")
这行, 设定自动重连接恩
至于如何判断数据库断开,
class dbthread(QtCore.QThread):
def __init__(self, parent=None):
QtCore.QThread.__init__(self)
def go (self):
self.start()
disconn = 0
def run(self):
query=QtSql.QSqlQuery(db=db)
query.exec_(QtCore.QString('''SHOW STATUS LIKE 'Uptime';'''))
print "db.isOpen()",db.isOpen()
status=query.next()
if not status:
self.emit(QtCore.SIGNAL("debug(QString)"), u"数据库断开, 正在重连...")
self.disconn = 1
elif self.disconn:
self.emit(QtCore.SIGNAL("debug(QString)"), u"重连接成功")
self.disconn = 0
写个定时器去运行吧
原来使用的是可怕到死的硬替换, 非常容易崩溃, 换成这样去做就基本不崩溃了