這是程式碼產生錯誤:
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}')")
我正在運行 Python 程式碼,但收到以下錯誤訊息:
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
我的猜測是您的連線遺失了,因為它不屬於您的班級。你能嘗試一下這個方法嗎?
在你的程式碼中,mydb 資料庫連線物件是在 Command 類別的 __init__ 方法中建立的。然而,這個連接物件並沒有作為類別的屬性保存下來,因此當 __init__ 方法執行完畢後,mydb 物件就可能會被 Python 的垃圾回收器回收,因為它不再被任何變數引用。
為了解決這個問題,你需要將資料庫連線物件 mydb 儲存為類別的一個屬性,這樣它就不會在 __init__ 方法執行完畢後被回收了。你可以透過在 self 上設定一個屬性來實現這一點,例如 self.mydb。