У меня проблема с моим соединением 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, когда он отключился.
Измените свой код, чтобы проверить правильное соединение, в противном случае каждый цикл:
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