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?

War es hilfreich?

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

begehen

Siehe 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.

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