You are correct - by default connections have autocommit set to False, so
everything you do is batched up, so to speak, until you call
Connection.commit (or Cursor.commit in recent source builds).
This makes coding very handy since you put the commit at the bottom of a
function. If an exception occurs and the connection is closed (which
happens automatically if you don't keep references to it), the transaction
is rolled back.