Python MySQL соединение автоматическое подключение при ошибке

0

У меня проблема с моим соединением mysql python, с которым мне нужна помощь. Моя настройка - это два Pi-сервера на каждом из них. Один Pi (SolartPi) имеет базу данных данных Mysql. Другой pi (OfficePi) подключается к базе данных SolarPi для извлечения и обновления данных по сетевому соединению.

Мой главный скрипт работает нормально, пока я не перезагружу SolarPi для обслуживания или проблемы с питанием, и соединение с OfficePi будет потеряно. Сценарий python на officePi затем переходит в цикл сбоев "2006, MYSQL Server ушел" Ниже приведен образец этого скрипта.

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, "Не могу подключиться к серверу MySQL на \'192.xxx.xx' (111 "Соединение отклонено") ')

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 продолжал пытаться подключиться к базе данных mysql SolarPi, когда он отключился.

Теги:

1 ответ

1
Лучший ответ

Измените свой код, чтобы проверить правильное соединение, в противном случае каждый цикл:

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
  • 0
    Спасибо, это работает, я предположил, что я должен положить все ниже класса DB: с отступом для этого класса. В любом случае, еще раз спасибо за быстрый ответ, теперь я буду внедрять это в мою основную программу :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню