Why the need to commit explicitly when doing an UPDATE?

tshepang picture tshepang · May 17, 2010 · Viewed 46.9k times · Source

Here's my 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()

If I remove the conn.commit(), the table isn't updated. But for select statements, I don't need that conn.commit(). I'm curious why?

Answer

bobince picture bobince · May 17, 2010

The DB-API spec requires that connecting to the database begins a new transaction, by default. You must commit to confirm any changes you make, or rollback to discard them.

Note that if the database supports an auto-commit feature, this must be initially off.

Pure SELECT statements, since they never make any changes to the database, don't have to have their changes committed.