Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Transaksi Basis Data: Menjaga Data Tetap Konsisten

Pelajaran 4 dari 14

BEGIN, COMMIT, dan ROLLBACK di modul sqlite3 Python

Kapan modul sqlite3 membuka transaksi

Setelah pelajaran ini kamu bisa membedakan tiga cara modul sqlite3 mengatur transaksi (isolation_level bawaan, autocommit=False, autocommit=True), membaca in_transaction, dan menyimpan perubahan dengan commit() sebelum koneksi ditutup.

±13 menitDiperiksa 7 Okt 2026

Materi

Modul sqlite3 punya dua mekanisme pengatur transaksi. Selama atribut autocommit bernilai LEGACY_TRANSACTION_CONTROL — dokumentasi Python menyebutnya nilai bawaan saat ini — perilakunya diatur isolation_level. Bila isolation_level bukan None (bawaannya string kosong), sqlite3 diam-diam menjalankan BEGIN sebelum INSERT, UPDATE, DELETE, atau REPLACE, tetapi tidak sebelum SELECT atau CREATE TABLE. Transaksi itu terbuka sampai commit() atau rollback(). Koneksi yang ditutup tanpa commit() kehilangan perubahannya.

Sejak Python 3.12, dokumentasi menganjurkan parameter autocommit. Dengan autocommit=False, sqlite3 selalu menjaga satu transaksi terbuka: commit() dan rollback() menutupnya lalu langsung membuka yang baru. Dengan autocommit=True, SQLite berada di mode autocommit, commit() dan rollback() tidak berbuat apa pun, dan BEGIN ditulis sendiri. Karena nilai bawaannya bisa berubah, tulis modenya secara eksplisit di connect().

Cara membuka koneksiBEGIN otomatiscommit() dan rollback()
connect(berkas) — isolation_level bawaanSebelum INSERT, UPDATE, DELETE, REPLACEMenutup transaksi yang terbuka
connect(berkas, isolation_level=None)Tidak pernahMenutup transaksi bila kamu membukanya dengan BEGIN
connect(berkas, autocommit=False)Selalu ada transaksi terbukaMenutup lalu membuka transaksi baru
connect(berkas, autocommit=True)Tidak pernahTidak berbuat apa pun

Atribut in_transaction bernilai True bila ada transaksi yang belum ditutup. executescript() meng-commit transaksi yang tertunda sebelum menjalankan skripnya, apa pun nilai isolation_level, dan menyetel isolation_level menjadi None juga meng-commit-nya.

conn = sqlite3.connect("arsip.db", autocommit=False)
conn.execute("INSERT INTO surat(nomor) VALUES (?)", ("012/ADM/X/2026",))
conn.commit()          # tanpa baris ini, surat hilang saat koneksi ditutup
conn.close()

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 2 dari 3

Koneksi dibuka dengan isolation_level bawaan. Apa yang dicetak kedua print?

conn = sqlite3.connect("kursus.db")
conn.execute("SELECT COUNT(*) FROM peserta").fetchone()
print(conn.in_transaction)
conn.execute("UPDATE peserta SET nama = 'Ayu L.' WHERE id = 1")
print(conn.in_transaction)
Pilih satu jawaban

Latihan 3 dari 3

Koneksi dibuka dengan autocommit=True. Apa yang terjadi pada peserta id 2?

conn = sqlite3.connect("kursus.db", autocommit=True)
conn.execute("DELETE FROM peserta WHERE id = 2")
conn.rollback()
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke