问题描述
我正在导入一个python函数,用于将mqtt数据存储到数据库中。 但是在执行时会产生属性错误
这是课程
class DatabaseManager():
def __init__(self):
while not hasattr(self,'connection'):
config = {
'user': 'root','password': 'SAVITRI@123devi','host': '192.168.99.100' if script_runs_within_container() else 'localhost','port': '3306','database': 'team'
}
try:
self.connection = MysqL.connector.connect(**config)
self.connection.execute('pragma foreign keys = on')
self.connection.commit()
self.cursor = self.connection.cursor()
except InterfaceError:
print("MysqL Container has not started yet. Sleep and retry...")
time.sleep(1)
def add_del_update_db_record(self,sql_query,args=()):
self.cursor.execute(sql_query,args)
self.connection.commit()
return
def __del__(self):
self.cursor.close()
self.connection.close()
def sensor_Data_Handler(Topic,jsonData):
if Topic == "Home/bedRoom/DHT22/Temperature":
DHT22_Temp_Data_Handler(jsonData)
elif Topic == "Home/bedRoom/DHT22/Humidity":
DHT22_Humidity_Data_Handler(jsonData)
我导入到其他文件。
Exception ignored in: <function DatabaseManager.__del__ at 0x7f5c1c7e3c80>
mqtt_listening_1 | Traceback (most recent call last):
mqtt_listening_1 | File "/store_data/store_Sensor_Data_to_DB.py",line 32,in __del__
mqtt_listening_1 | self.cursor.close()
mqtt_listening_1 | AttributeError: 'DatabaseManager' object has no attribute 'cursor'
mqtt_listening_1 | Exception ignored in: <function DatabaseManager.__del__ at 0x7f5c1c7e3c80>
mqtt_listening_1 | Traceback (most recent call last):
mqtt_listening_1 | File "/store_data/store_Sensor_Data_to_DB.py",in __del__
mqtt_listening_1 | self.cursor.close()
我实际上是试图连续存储数据,因此每次调用函数时,都会显示此错误
def DHT22_Temp_Data_Handler(jsonData):
json_Dict = json.loads(jsonData)
SensorID = json_Dict['Sensor_ID']
Temperature = json_Dict['Temperature']
#Push into DB Table
dbObj = DatabaseManager()
insert_stmt = (
"INSERT INTO DHT22_Temperature_Data (SensorID,Temperature) "
"VALUES (%s,%s)")
dbObj.add_del_update_db_record( insert_stmt,(SensorID,Temperature))
del dbObj
print("Inserted Temperature Data into Database.")
print("")
解决方法
您可能没有成功连接到数据库,这就是为什么它找不到光标的原因。
打印错误以查看会发生什么:
try:
self.connection = mysql.connector.connect(**config)
self.connection.execute('pragma foreign keys = on')
self.connection.commit()
self.cursor = self.connection.cursor()
except Exception as e:
print("MySQL Container has not started yet. Sleep and retry...")
print("Error: ",e)
time.sleep(1)