Frage

Ich habe einige Schwierigkeiten, eine Zeile in einer MySQL-Datenbank zu aktualisieren. Hier ist der Code, ich versuche zu laufen:

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()

Die Ausgabe erhalte ich, wenn ich dieses Programm laufen soll:

  

4
Anzahl der Zeilen aktualisiert: 1

Es scheint, wie es funktioniert, aber wenn ich die Datenbank von der MySQL-Befehlszeilenschnittstelle (CLI) abfragen, finde ich, dass es nicht aktualisiert wurde. wenn von der CLI Allerdings habe ich die Datenbank eingeben UPDATE compinfo SET Co_num=4 WHERE ID=100; wird aktualisiert, wie erwartet.

Was ist mein Problem? Ich bin mit Python 2.5.2 mit MySQL 5.1.30 auf einem Windows-.

War es hilfreich?

Lösung

Ich bin nicht sicher, aber ich werde Sie verwenden eine InnoDB-Tabelle erraten, und Sie haben kein begehen getan. Ich glaube MySQLdb Transaktionen automatisch aktiviert.

Anruf conn.commit() vor close aufrufen.

Aus der FAQ: beginnend mit 1.2.0 MySQLdb deaktiviert Autocommit standardmäßig

Andere Tipps

MySQLdb hat standardmäßig Autocommit aus, die zunächst verwirrend sein kann. Ihre Verbindung besteht in einer eigenen Transaktion, und Sie werden sehen, in der Lage, um die Änderungen, die Sie nicht von anderen Verbindungen, bis Sie diese Transaktion zu begehen.

Sie können entweder conn.commit() nach der Update-Anweisung tun, wie andere darauf hingewiesen haben, oder diese Funktion deaktivieren insgesamt durch conn.autocommit(True) Einstellung rechts, nachdem Sie das Verbindungsobjekt erstellen.

Sie müssen Änderungen manuell begehen oder drehen autocommit auf.

Der Grund SELECT die modifizierte zurück (aber nicht beibehalten) Daten, da die Verbindung immer noch in derselben Transaktion ist.

Ich habe festgestellt, dass Python-Anschluss verwandelt autocommit automatisch ab, und es scheint keinen Weg, um dieses Verhalten zu ändern. Natürlich können Sie es wieder einschalten können, aber dann an den Abfrage-Logs suchen, es dummerweise hat zwei sinnlose Anfragen nach dann wieder einzuschalten autocommit off verbinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top