python mysql连接错误时自动连接

时间:2018-04-17 11:36:03

标签: python mysql

我的python mysql连接有问题需要帮助。 我的设置是两个Pi在每个服务器上运行服务器。 One Pi(SolartPi)有Mysql数据库收集数据。另一个pi(OfficePi)连接到solarPi数据库,以通过网络连接检索和更新数据。

我的主脚本工作正常,直到我必须重新启动SolarPi以解决维护或电源问题,并且与OfficePi的连接丢失。 officePi上的python脚本然后进入故障循环" 2006年,MYSQL服务器已经消失了#34;以下是此脚本的示例。

import MySQLdb

connSolar = MySQLdb.connect("192.xxx.x.x", "external", "xxxxx", "xxxxx") 
#eternal connection to solar pi database
cursSolar = connSolar.cursor()

while 1:

   try:
       cursSolar.execute("SELECT * FROM dashboard")
       connSolar.commit()
       for reading in cursSolar.fetchall():
           heatingDemand = reading[2] #get heating demand from dB
           print heatingDemand
   except (MySQLdb.Error, MySQLdb.Warning) as e:
       print (e)    

connSolar.close()

所以我尝试使用stackoverflow和一个网站的脚本重写这个,如下所示,但是现在当SolarPi重启时出现以下错误,这会终止程序  _mysql_exceptions.OperationalError:(2003,'无法连接到\' 192.xxx.x.x上的MySQL服务器'(111"连接被拒绝") &#39)

import MySQLdb

class DB:
con = None

def connect(self):
    self.conn = MySQLdb.connect("192.xxx.x.x", "xxxxx", "xxxxxx", "house") #eternal connection to solar pi database

def query(self, sql):
    try:
        cursor = self.conn.cursor()
        cursor.execute(sql)
    except (AttributeError, MySQLdb.OperationalError):
        self.connect()
        cursor = self.conn.cursor()
        cursor.execute(sql)
    return cursor   

while 1:
    db = DB()
    sql = "SELECT * FROM dashboard"
    cur = db.query(sql)
    for reading in cur.fetchall():
        heatingDemand = reading[2] #get heating demand from dB
        print heatingDemand

OfficePi是否有办法在关闭时继续尝试连接到SolarPi mysql数据库。

1 个答案:

答案 0 :(得分:2)

更改代码以检查每个循环否则通过的有效连接:

import MySQLdb

class DB:

    def connect(self):
        try:
            self.conn = MySQLdb.connect("192.xxx.x.x", "xxxxx", "xxxxxx", "house")

        except (MySQLdb.Error, MySQLdb.Warning) as e:
            print (e)
            self.conn = None

    return self.conn

    def query(self, sql):
        try:
            cursor = self.conn.cursor()
            cursor.execute(sql)
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            cursor = self.conn.cursor()
            cursor.execute(sql)
        return cursor   

while 1:
    db = DB()

    conn = db.connect()

    if conn:
        sql = "SELECT * FROM dashboard"
        cur = db.query(sql)
        for reading in cur.fetchall():
            heatingDemand = reading[2] #get heating demand from dB
            print heatingDemand