在函数之外访问类

时间:2018-11-03 07:14:19

标签: mysql python-3.x

我想在class函数中定义的sql_process()函数中访问mycursor(sql_connect数据类型)。 代码是:

def sql_connect():
    print("In sql_connect function")
    mydb = mysql.connector.connect(
        host="localhost",
        user="jarvis",
        passwd="raspberry",
        database="nGShelter"
        )
    mycursor = mydb.cursor() #type(mycursor) ---> class
    return(mycursor)

def sql_process():
    print("In sql_process function")
    try:
        sql_connect().execute("SHOW Tables")
        for tables in mycursor:
            print(tables)
    except mysql.connector.Error as err:
        print("Failed to open database: {}".format(err))
        exit(1)

def main():
    sql_connect()
    sql_process()
##    

if __name__ == '__main__':
    sys.exit(main())

运行时发生错误

In sql_connect function
In sql_process function
In sql_connect function
Traceback (most recent call last):
  File "/home/pi/Projects/json_mysql_post.py", line 42, in <module>
    sys.exit(main())
  File "/home/pi/Projects/json_mysql_post.py", line 38, in main
    sql_process()
  File "/home/pi/Projects/json_mysql_post.py", line 29, in sql_process
    sql_connect().execute("SHOW Tables")
  File "/usr/lib/python3/dist-packages/mysql/connector/cursor.py", line 526, in execute
    if not self._connection:
ReferenceError: weakly-referenced object no longer exists

1 个答案:

答案 0 :(得分:0)

不让示波器死掉的解决方法

class SQLOps:
    def __init__(self):
        print("In sql_connect function")
        self.mydb = mysql.connector.connect(
            host="localhost",
            user="jarvis",
            passwd="raspberry",
            database="nGShelter"
        )
        self.mycursor = self.mydb.cursor()
    def sql_process(self):
        print("In sql_process function")
        try:
            self.mycursor.execute("SHOW Tables")
            for tables in self.mycursor:
                print(tables)
        except mysql.connector.Error as err:
            print("Failed to open database: {}".format(err))
            exit(1)

def main():
    sql = SQLOps()
    sql.sql_process()