Materi
INSERT menambah baris, UPDATE mengubah kolom pada baris yang lolos syarat WHERE, dan DELETE menghapus baris yang lolos WHERE. Dokumentasi SQLite menegaskan bahwa UPDATE tanpa WHERE mengubah semua baris tabel, dan DELETE tanpa WHERE menghapus semuanya. Di Python, cursor.rowcount sesudah execute() berisi jumlah baris yang diubah oleh INSERT, UPDATE, DELETE, atau REPLACE. UPDATE yang tidak cocok dengan baris mana pun bukan galat: rowcount bernilai 0 dan program berjalan terus.
Satu kejadian bisnis jarang selesai dengan satu pernyataan. Penjualan mengurangi stok lalu mencatat nota; pengembalian buku menandai peminjaman selesai lalu menambah jumlah buku yang tersedia. Pada koneksi yang dibuka dengan isolation_level=None, SQLite membuka transaksi otomatis untuk setiap pernyataan dan meng-commit-nya begitu pernyataan itu selesai. Program yang berhenti di antara dua pernyataan, karena galat atau koneksi putus, meninggalkan data setengah jalan: stok sudah berkurang, notanya tidak pernah ada.
Syarat bisnis yang menyangkut satu baris bisa ditulis langsung di WHERE. Pengurangan di bawah hanya mengenai baris yang sisanya cukup, dan rowcount memberi tahu apakah syarat itu terpenuhi. Pemeriksaan dan perubahan terjadi dalam satu pernyataan, tanpa celah di antaranya.
cur = conn.execute(
"UPDATE tiket SET sisa = sisa - ? WHERE kode = ? AND sisa >= ?",
(2, "KRL-PAGI", 2),
)
if cur.rowcount == 0:
print("Tiket tidak cukup atau kodenya tidak dikenal")