0Pricing
Python Academy · Pelajaran

Transaksi dan Pengelola Context

Lakukan commit dan rollback dengan aman

Transaksi dan Pengelola Context adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Apa Itu Transaksi

Transaksi mengelompokkan beberapa pernyataan sehingga semuanya berhasil atau semuanya gagal secara bersamaan. Hal ini menjaga konsistensi data Anda.

SQLite memulai transaksi secara otomatis sebelum pernyataan yang mengubah data.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
print('Table ready for transactions')
conn.close()

Simpan dengan commit

Perubahan belum permanen sampai Anda memanggil conn.commit(). Sampai saat itu, perubahan hanya ada dalam transaksi saat ini.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
cur.execute('INSERT INTO accounts (balance) VALUES (100)')
conn.commit()
print('Committed')
conn.close()

Membatalkan dengan rollback

conn.rollback() membatalkan setiap perubahan sejak commit terakhir. Gunakan ini saat terjadi masalah.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
conn.commit()
cur.execute('INSERT INTO accounts (balance) VALUES (100)')
conn.rollback()
cur.execute('SELECT COUNT(*) FROM accounts')
print('Rows after rollback:', cur.fetchone()[0])
conn.close()

Transfer Uang

Transaksi sangat berguna ketika beberapa pembaruan harus tetap selaras. Transfer bank mengurangi saldo satu rekening dan menambah saldo rekening lain. Keduanya harus terjadi, atau tidak satu pun terjadi.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 100)')
cur.execute('INSERT INTO accounts (id, balance) VALUES (2, 50)')
cur.execute('UPDATE accounts SET balance = balance - 30 WHERE id = 1')
cur.execute('UPDATE accounts SET balance = balance + 30 WHERE id = 2')
conn.commit()
cur.execute('SELECT id, balance FROM accounts')
print(cur.fetchall())
conn.close()

Menangani Kesalahan dengan try/except

Bungkus transaksi dalam try/except. Jika terjadi kesalahan, lakukan rollback agar perubahan sebagian tidak merusak data Anda.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
try:
    cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 100)')
    cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 200)')
    conn.commit()
except sqlite3.IntegrityError:
    conn.rollback()
    print('Rolled back after error')
conn.close()

Koneksi sebagai Pengelola Konteks

Menggunakan with conn: akan melakukan commit secara otomatis saat berhasil dan rollback jika terjadi pengecualian di dalam blok.

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
with conn:
    conn.execute('INSERT INTO accounts (balance) VALUES (100)')
print('Auto-committed via with block')
conn.close()

Rollback Otomatis saat Terjadi Pengecualian

Jika blok with conn: memunculkan pengecualian, transaksi dibatalkan secara otomatis. Perhatikan bahwa koneksi itu sendiri tetap terbuka.

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY)')
try:
    with conn:
        conn.execute('INSERT INTO accounts (id) VALUES (1)')
        conn.execute('INSERT INTO accounts (id) VALUES (1)')
except sqlite3.IntegrityError:
    print('Block rolled back automatically')
count = conn.execute('SELECT COUNT(*) FROM accounts').fetchone()[0]
print('Rows:', count)
conn.close()

closing() untuk Koneksi

Pembantu contextlib.closing menjamin bahwa close() dipanggil saat blok berakhir, sehingga koneksi dilepaskan.

import sqlite3
from contextlib import closing
with closing(sqlite3.connect(':memory:')) as conn:
    conn.execute('CREATE TABLE t (id INTEGER)')
    print('Used inside closing()')
print('Connection closed automatically')

Menggabungkan Kedua Pola

Sarang­kan with conn: di dalam closing(...) untuk mengelola transaksi sekaligus memastikan koneksi ditutup.

import sqlite3
from contextlib import closing
with closing(sqlite3.connect(':memory:')) as conn:
    conn.execute('CREATE TABLE t (id INTEGER, v TEXT)')
    with conn:
        conn.execute('INSERT INTO t VALUES (1, ?)', ('hello',))
    print(conn.execute('SELECT * FROM t').fetchall())

isolation_level

Tingkat isolasi koneksi, isolation_level, mengontrol kapan transaksi dimulai. Nilai bawaan membiarkan SQLite mengelolanya; mengaturnya ke None mengaktifkan mode commit otomatis.

import sqlite3
conn = sqlite3.connect(':memory:')
print('Default isolation_level:', repr(conn.isolation_level))
conn.isolation_level = None
print('Now autocommit:', conn.isolation_level)
conn.close()

Mengapa Transaksi Penting

Tanpa transaksi, kerusakan program di tengah pembaruan dapat meninggalkan data yang baru diperbarui sebagian. Transaksi membuat sekumpulan perubahan menjadi atomik: tidak dapat dibagi. Hal ini melindungi integritas.

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE log (msg TEXT)')
with conn:
    conn.execute('INSERT INTO log VALUES (?)', ('all or nothing',))
print('Atomic write done')
conn.close()

Pemeriksaan Cepat

Uji pengetahuan Anda tentang transaksi.

Rangkuman

Anda telah mempelajari cara mengelola transaksi dengan aman.

  • commit() menyimpan perubahan; rollback() membatalkannya
  • Bungkus penulisan yang berisiko dalam try/except dengan rollback
  • with conn: melakukan commit atau rollback secara otomatis
  • contextlib.closing menjamin koneksi ditutup

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Transaksi dan Pengelola Context” gratis?

Ya — teks lengkap “Transaksi dan Pengelola Context” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Transaksi dan Pengelola Context”?

Lakukan commit dan rollback dengan aman Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Transaksi dan Pengelola Context” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menyambungkan dan Membuat Tabel
  2. Insert, Select, Update, Delete
  3. Kueri Berparameter
  4. Transaksi dan Pengelola Context
← Kembali ke Python Academy