Dies ist der Code, der den Fehler erzeugt:
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}')")
Ich führe Python-Code aus, erhalte jedoch die folgende Fehlermeldung:
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。