Maison >base de données >tutoriel mysql >Pourquoi mes mises à jour Python MySQL ne se reflètent-elles pas dans la base de données ?
Dépannage des problèmes de mise à jour des bases de données MySQL et Python
Lorsqu'ils tentent de mettre à jour les données d'une base de données MySQL à l'aide de Python, les développeurs peuvent rencontrer des situations dans lesquelles des modifications ont été apportées. via le code Python ne se reflète pas dans la base de données lorsqu'il est interrogé directement. Cet article étudie ce problème et propose une solution potentielle.
Description du problème
Comme décrit par un utilisateur, un programme utilisant MySQLdb pour mettre à jour une ligne de base de données ne parvient pas à enregistrer la change de manière persistante. Le code exécute une requête de mise à jour mais, lors de l'inspection de la base de données via l'interface de ligne de commande (CLI), les mises à jour ne sont pas observées.
import MySQLdb conn = MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname") cursor = conn.cursor() cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100") cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100") results = cursor.fetchall() for row in results: print row[0] print "Number of rows updated: %d" % cursor.rowcount cursor.close() conn.close()
Solution
La le problème provient de la gestion des transactions par défaut dans MySQLdb. Par défaut, MySQLdb désactive la validation automatique, ce qui signifie que les modifications apportées à la base de données ne sont pas conservées jusqu'à ce qu'une opération de validation soit explicitement exécutée. Pour résoudre le problème, le code doit inclure un appel à conn.commit() avant de fermer la connexion :
import MySQLdb conn = MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname") cursor = conn.cursor() cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100") # Commit the changes to the database conn.commit() cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100") results = cursor.fetchall() for row in results: print row[0] print "Number of rows updated: %d" % cursor.rowcount cursor.close() conn.close()
Avec conn.commit(), les modifications sont validées dans la base de données, garantissant que les requêtes ultérieures refléter les valeurs mises à jour.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!