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 6 dari 14

BEGIN, COMMIT, dan ROLLBACK di modul sqlite3 Python

Konteks with conn: commit dan rollback otomatis

Setelah pelajaran ini kamu bisa memakai koneksi sqlite3 sebagai context manager yang meng-commit saat berhasil dan me-rollback saat ada exception, dan mengenali mode koneksi di mana with conn: tidak melindungi apa pun.

±13 menitDiperiksa 7 Okt 2026

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

Latihan

0/3 lulus

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

Latihan 2 dari 3

Kelas id 2 punya kursi_sisa 0 dan CHECK (kursi_sisa >= 0). Koneksi dibuka dengan isolation_level=None. Apa isi tabel setelah kode ini?

conn = sqlite3.connect("kursus.db", isolation_level=None)
try:
    with conn:
        conn.execute("INSERT INTO pendaftaran(peserta, kelas_id) VALUES ('Dewi', 2)")
        conn.execute("UPDATE kelas SET kursi_sisa = kursi_sisa - 1 WHERE id = 2")
except sqlite3.IntegrityError:
    pass
Pilih satu jawaban

Latihan 3 dari 3

Kursi_sisa kelas 1 mula-mula 2. Apa yang dicetak kode ini?

conn = sqlite3.connect("kursus.db", autocommit=False)
try:
    with conn:
        conn.execute("UPDATE kelas SET kursi_sisa = 10 WHERE id = 1")
        raise ValueError("data tidak lengkap")
except ValueError:
    print("dibatalkan")
print(conn.execute("SELECT kursi_sisa FROM kelas WHERE id = 1").fetchone())
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke