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 ?

Pourquoi mes mises à jour Python MySQL ne se reflètent-elles pas dans la base de données ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 04:32:10192parcourir

Why Aren't My Python MySQL Updates Reflecting in the Database?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn