cur.execute("DROP TABLE IF EXISTS users")
cur.execute("""CREATE TABLE IF NOT EXISTS users (
id INTEGER )""")
cur.execute("INSERT INTO users VALUES (0); COMMIT; INSERT INTO users VALUES (1)")
cur.execute("INSERT INTO users VALUES (2)")
BEGIN начинает блок транзакции, то есть обозначает, что все операторы после команды BEGIN и до явной команды COMMIT или ROLLBACK будут выполняться в одной транзакции. По умолчанию (без BEGIN) Postgres Pro выполняет транзакции в режиме «autocommit» (автофиксация), то есть каждый оператор выполняется в своей отдельной транзакции, которая неявно фиксируется в конце оператора (если оператор был выполнен успешно; в противном случае транзакция откатывается).
con.autocommit = False
транзакция начинается до cur.execute
и закрывается после, а не внутри.