Warum die Notwendigkeit ausdrücklich zu verpflichten, wenn ein Update zu tun?
Frage
Hier ist mein Code:
import cx_Oracle
conn = cx_Oracle.connect(usr, pwd, url)
cursor = conn.cursor()
cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
conn.commit()
Wenn ich die conn.commit()
entfernen, wird die Tabelle nicht aktualisiert. Aber für select-Anweisungen, brauche ich nicht, dass conn.commit()
. Ich bin neugierig, warum?
Lösung
Der DB-API spec setzt voraus, dass die Verbindung zur Datenbank ein beginnt neue Transaktion standardmäßig. Sie müssen alle Änderungen bestätigen commit
Sie machen, oder rollback
sie zu verwerfen.
Beachten Sie, dass, wenn die Datenbank unterstützt eine Auto-commit-Funktion, muss dies zunächst ausgeschaltet sein.
Reine SELECT
Aussagen, da sie nie in die Datenbank Änderungen vornehmen, müssen nicht ihre Änderungen begangen haben.
Andere Tipps
commit wird verwendet, um die Datenbank zu sagen, alle Änderungen in der aktuellen Transaktion zu speichern.
Wählen Sie keine Daten ändern, so gibt es nichts, nichts zu retten und damit
begehenSiehe wikipedia für Transaktionen
Andere haben erklärt, warum eine Festschreibung auf eine SELECT-Anweisung ist nicht erforderlich. Ich wollte nur darauf hinweisen Sie die autocommit
Eigenschaft der Verbindung nutzen könnten Objekt manuell zu vermeiden, dass sie ausführen begehen:
import cx_Oracle
with cx_Oracle.connect(usr, pwd, url) as conn:
conn.autocommit = True
cursor = conn.cursor()
cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
cursor.close()
Dies ist besonders nützlich, wenn Sie mehrere INSERT haben, UPDATE und DELETE-Anweisungen innerhalb der gleichen Verbindung.