2

J'utilise un programme python pour manipuler une base de données MySQL.Erreur de fermeture de curseur en python MYSQLConnection

Lorsque vous essayez d'utiliser le planificateur de tâches Windows Server 2012, cela ne fonctionne jamais, le rapport indique qu'il a réussi mais il n'y a pas de résultat. Après avoir utilisé un script powershell pour appeler le programme python, il ne fonctionne toujours pas lorsqu'il est utilisé par le planificateur de tâches (alors qu'il fonctionne quand je l'exécute moi-même).

Voici une partie rapportée comme buggé:

try: 
    dbconfig = read_db_config() 
    conn = MySQLConnection(**dbconfig) 
    cursor = conn.cursor() 
    delstatmt = "DELETE FROM `event` WHERE filliere='IRC' OR filliere='ETI' OR filliere='CGP'" 
    cursor.execute(delstatmt) 
    conn.commit() 
except Error as e: 
    print(e) 

finally: 
    cursor.close() 
    conn.close() 

L'erreur étant à la ligne "cursor.close()": UnboundLocalError: variable locale 'curseur' référencé avant affectation

Note: Il fonctionne quand il n'est pas géré par le planificateur de tâches.

Editer: Shubham Namdeo solution de travail, même si le problème vient de passer à conn.close() Je l'ai également déplacé dans le "try". Je ne comprends pas pourquoi cela n'a pas fonctionné dans la première forme puisque cela fonctionnait quand je l'exécutais moi-même. Alors que d'autres erreurs sont apparues, elles ne sont pas liées à cette question. Voici le code final:

try: 
    dbconfig = read_db_config() 
    conn = MySQLConnection(**dbconfig) 
    cursor = conn.cursor() 
    delstatmt = "DELETE FROM `event` WHERE filliere='IRC' OR filliere='ETI' OR filliere='CGP'" 
    cursor.execute(delstatmt) 
    conn.commit() 
    cursor.close() 
    conn.close() 
except Error as e: 
    print(e) 
+0

avez-vous vérifié si 'conn = MySQLConnection (** dbconfig)' fonctionne correctement? Si ce n'est pas le cas, aucun curseur ne sera créé et dans 'finally', python déclenchera une erreur. –

+0

Merci, et selon votre modification j'ai également mis à jour la réponse. –

Répondre

1

Citant mon commentaire ici

Have you checked whether conn = MySQLConnection(**dbconfig) is working correctly? If it is not, then no cursor will be ever created and in finally python will raise error.

Essayez d'utiliser ce code au lieu du vôtre:

try: 
    dbconfig = read_db_config() 
    conn = MySQLConnection(**dbconfig) 
    cursor = conn.cursor() 
    delstatmt = "DELETE FROM `event` WHERE filliere='IRC' OR filliere='ETI' OR filliere='CGP'" 
    cursor.execute(delstatmt) 
    conn.commit() 
    cursor.close() 
    conn.close() 

except Error as e: 
    print(e) 

Cela pourrait résoudre votre problème.