Materi
Objek Connection bisa dipakai sebagai context manager. Dokumentasi Python merinci perilakunya: bila badan blok with selesai tanpa exception, transaksi di-commit; bila commit itu gagal, atau badan blok melempar exception yang tidak ditangkap, transaksi di-rollback dan exception-nya tetap dilempar keluar sehingga harus ditangkap di luar blok. Pada autocommit=False, transaksi baru dibuka lagi sesudahnya.
Ada dua hal yang tidak dilakukan with conn:. Ia tidak membuka transaksi, dan ia tidak menutup koneksi. Bila tidak ada transaksi terbuka saat blok selesai, atau koneksinya autocommit=True, context manager tidak berbuat apa pun. Akibatnya, pada koneksi isolation_level=None, setiap pernyataan di dalam with sudah tersimpan sendiri-sendiri, dan galat di pernyataan kedua tidak membatalkan pernyataan pertama. with conn: melindungi transaksi pada koneksi bawaan dan autocommit=False.
conn = sqlite3.connect("klinik.db", autocommit=False)
try:
with conn:
conn.execute("INSERT INTO janji(pasien, jam) VALUES (?, ?)", ("Pak Darmo", "09.00"))
conn.execute("UPDATE jadwal SET slot = slot - 1 WHERE dokter = ?", ("dr. Sari",))
except sqlite3.IntegrityError:
print("Slot dr. Sari habis; janji tidak dibuat")
conn.close() # with tidak menutup koneksi