Ini adalah kod yang menghasilkan ralat:
import mysql.connector import datetime class Command: def __init__(self): mydb = mysql.connector.connect(host='localhost', passwd='1234', user='root', database='customers') self.mycursor = mydb.cursor() def execute(self, contest_id, url, Questions): date = datetime.date.today() Time = datetime.datetime.now().strftime("%I:%M") self.mycursor.execute(f"INSERT INTO contest(contest_name, url_tag, Questions, At_date, At_time) VALUES('{contest_id}', '{url}', {Questions}, '{date}', '{Time}')")
Saya menjalankan kod Python tetapi saya mendapat mesej ralat berikut:
Traceback (most recent call last): File "C:\python39\lib\site-packages\mysql\connector\cursor.py", line 518, in execute if not self._connection: ReferenceError: weakly-referenced object no longer exists
Tekaan saya ialah sambungan anda terputus kerana ia bukan milik kelas anda. Bolehkah anda mencuba kaedah ini?
Dalam kod anda, objek sambungan pangkalan data mydb dicipta dalam kaedah __init__ kelas Perintah. Walau bagaimanapun, objek sambungan ini tidak disimpan sebagai atribut kelas, jadi apabila kaedah __init__ selesai, objek mydb mungkin dikitar semula oleh pengumpul sampah Python kerana ia tidak lagi dirujuk oleh mana-mana pembolehubah.
Untuk menyelesaikan masalah ini, anda perlu menyimpan objek sambungan pangkalan data mydb sebagai atribut kelas supaya ia tidak akan dikitar semula selepas kaedah __init__ dilaksanakan. Anda boleh melakukan ini dengan menetapkan sifat pada diri sendiri, seperti self.mydb.