AttributeError:类型对象'DatabaseManager'没有属性'cursor'

问题描述

我正在导入一个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()

包含此类的Python文件也具有功能

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()

我实际上是试图连续存储数据,因此每次调用函数时,都会显示错误

sensor_data_handler调用的另外两个功能

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)