Sang Bài 3, kho báu bắt đầu có biến động: Rồng đến ăn trộm, hoặc vũ khí bị hỏng cần vứt đi. Chúng ta sẽ dùng Update và Delete.
Hãy tạo file bai3_crud_ud.py để thực hiện các tình huống giả định sau:
Để sửa đổi dữ liệu đã có sẵn, ta dùng lệnh UPDATE tên_bảng SET cột_cần_sửa = giá_tri_nhiêu WHERE id = mấy.
⚠️ Lời cảnh báo tối quan trọng cho các con: Khi dùng
UPDATEhoặcDELETE, luôn luôn phải có điều kiệnWHERE. Nếu quênWHERE, máy tính sẽ sửa (hoặc xóa) SẠCH SẼ TOÀN BỘ CÁC MÓN ĐỒ trong tủ! Lúc đó kho báu sẽ biến mất!
import sqlite3
ket_noi = sqlite3.connect("kho_bau.db")
nguoi_tho = ket_noi.cursor()
# --- PHÉP THUẬT 3: UPDATE (CẬP NHẬT SỐ LƯỢNG) ---
# Táo vàng ròng đang có ID là 2 (kiểm tra trong DB Browser). Ta sửa số lượng thành 10.
nguoi_tho.execute("""
UPDATE kho_bau
SET so_luong = 10
WHERE id = 2
""")
ket_noi.commit()
print("Cảnh báo! Rồng đã ăn trộm mất 5 quả táo! Đã cập nhật lại số lượng táo vàng còn 10.")
Để xóa một dòng dữ liệu, ta dùng lệnh DELETE FROM tên_bảng WHERE id = mấy.
# --- PHÉP THUẬT 4: DELETE (XÓA BỎ) ---
# Kiếm kim cương đang có ID là 1. Ta xóa nó đi.
nguoi_tho.execute("""
DELETE FROM kho_bau
WHERE id = 1
""")
ket_noi.commit()
print("Thanh kiếm kim cương đã gãy! Đã xóa hoàn toàn khỏi kho báu.")
ket_noi.close()
Sau khi chạy xong cả 2 bài, hãy mở DB Browser for SQLite lên để chứng kiến sự thay đổi:
Thanh kiếm (ID 1) đã biến mất hoàn toàn? $\rightarrow$ Đúng!
Quả táo vàng (ID 2) số lượng đã chuyển từ 15 về 10? $\rightarrow$ Đúng!
Thử thách nâng cao: "Bây giờ ta viết một đoạn code Python cho phép bố tự gõ tên một món đồ mới và giá trị của nó từ bàn phím (sử dụng lệnh input()), sau đó Python sẽ tự động INSERT món đồ đó vào database. Các con làm được không?"
Mẹo cho bố hướng dẫn con câu này: Sử dụng dấu chấm hỏi ? làm người đại diện trong câu lệnh SQL để truyền biến Python vào:
nguoi_tho.execute("INSERT INTO kho_bau (ten_vat_pham, gia_tri) VALUES (?, ?)", (ten_bien_1, ten_bien_2))