python mysql连接自动连接打开

2024-10-03 04:39:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的主脚本可以正常工作,直到因为维护或电源问题而不得不重新启动SolarPi,并且与OfficePi的连接丢失。officePi上的python脚本随后进入一个错误循环“2006,MYSQL Server has going away”下面是这个脚本的一个示例。在

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数据库_操作错误:(2003,“无法连接到'192.xxx.x.x'上的MySQL server'(111“连接被拒绝”)')

^{pr2}$

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


Tags: 数据脚本数据库错误mysqlpixxxxxxxx
1条回答
网友
1楼 · 发布于 2024-10-03 04:39:47

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

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

相关问题 更多 >