# Perilaku commit di psycopg: transaksi implisit sejak execute()
# pertama, dan rollback implisit bila koneksi ditutup tanpa commit.
import psycopg

conn = psycopg.connect()
conn.execute("""
    CREATE TABLE item_pesanan (
        id      integer PRIMARY KEY,
        pesanan integer NOT NULL,
        produk  text NOT NULL,
        jumlah  integer NOT NULL
    )
""")
conn.commit()

# psycopg membuka transaksi implisit pada execute() pertama.
conn.execute(
    "INSERT INTO item_pesanan VALUES (1, 101, 'Beras 5 kg', 2)")
conn.close()  # ditutup TANPA commit

with psycopg.connect() as cek:
    print("A) INSERT tanpa commit, koneksi ditutup:",
          cek.execute("SELECT count(*) FROM item_pesanan").fetchone()[0],
          "baris")

conn = psycopg.connect()
conn.execute(
    "INSERT INTO item_pesanan VALUES (1, 101, 'Beras 5 kg', 2)")
conn.commit()  # commit eksplisit
conn.close()

with psycopg.connect() as cek:
    print("B) INSERT lalu conn.commit()        :",
          cek.execute("SELECT count(*) FROM item_pesanan").fetchone()[0],
          "baris")
