Voici le code qui produit l'erreur :
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}')")
J'exécute du code Python et je reçois le message d'erreur suivant :
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
Je suppose que votre connexion est perdue car elle n'appartient pas à votre classe. Pouvez-vous essayer cette méthode ?
Dans votre code, l'objet de connexion à la base de données mydb est créé dans la méthode __init__ de la classe Command. Cependant, cet objet de connexion n'est pas enregistré en tant qu'attribut de la classe, donc lorsque la méthode __init__ se termine, l'objet mydb peut être recyclé par le garbage collector de Python car il n'est plus référencé par aucune variable.
Afin de résoudre ce problème, vous devez enregistrer l'objet de connexion à la base de données mydb en tant qu'attribut de la classe afin qu'il ne soit pas recyclé après l'exécution de la méthode __init__. Vous pouvez le faire en définissant une propriété sur self, telle que self.mydb.