上一回我們介紹了DB Browser for SQLite(DB4S),並透過DB4S進行資料庫及資料表的建立,接下來我們將回到Python,透過Python對資料庫進行資料的插入、修改及刪除。
開始前,我們先在DB4S創建一個名為Ingredient.db的資料庫,用於紀錄食品材料的庫存,資料表的欄位如下:

建立完成後,我們在DB4S中新增以下幾筆資料:

新增完成後,我們回到Python使用以下程式碼進行查詢驗證:
import sqlite3
con = sqlite3.connect("Ingredient.db")
cur = con.cursor()
cur.execute("SELECT * FROM ingredient;")
rows = cur.fetchall()
for row in rows:
print(row)
執行後可以得到這個結果:

插入資料
接下來,我們要嘗試進行資料的插入(Insert),相信各位也發現,使用sqlite3套件進行任何資料庫的操作都是使用SQL指令,所以我推薦可以設置一個變數為SQL指令的內容,比如我們現在要進行的插入(INSERT INTO)。
如果我要新增一筆牛奶的庫存資料,SQL指令內容如下:
Name = "Milk"
Amount = 3
Unit = "瓶"
sqlite_command = f"INSERT INTO ingredient(Name, Amount, Unit) VALUES ('{Name}', {Amount}, '{Unit}');"
其中因為ID是自動增值欄位,所以我們就不會特別去設定它的值,另外Name和Unit是字串所以要加上引號。
接下來我們透過這串代碼進行寫入:
cur.execute(sqlite_command)
con.commit()
執行後我們回到DB4S檢查,可以看到除了原先的三筆資料外,多了一筆Milk的資料,這樣就確實完成了插入的動作。

刪除資料
接下來我們進行資料的刪除(DELETE)。假設我要刪除名稱為雞蛋的所有資料,代碼如下:
Name = "Egg"
sqlite_command = f"DELETE FROM ingredient WHERE Name = '{Name}';"
cur.execute(sqlite_command)
con.commit()
執行後回到DB4S進行檢查,可以看到Egg的資料已經被刪除。

值得一提的是,就之前在工作上的經驗,通常不太會刪除資料庫的資料,會讓他一直存放在資料庫中,並且會有欄位用於標記這筆資料是否有效(如deleted),這牽涉到很多層面,比如日後要進行追蹤、保留資料作為爭議處理的依據等,主要原因是刪除的動作不可逆,被刪除的資料是難以進行(如果沒備份甚至無法)復原的。
修改資料
再來我們要進行資料的修改,又或者說更新(UPDATE)。假設我們要將麵粉的庫存改成200克,代碼如下:
Name = "Flour"
Amount = 200
sqlite_command = f"UPDATE ingredient SET Amount = {Amount} WHERE Name = '{Name}';"
cur.execute(sqlite_command)
con.commit()
執行後再回到DB4S進行檢查,可以看到Flour的數量(Amount)被修改為200。

提醒一下大家,因為到目前為止都只是教學,一般來說在完成操作後建議關閉資料庫連線,至於原因為何之後會再跟大家補充:
con.close()
下一步
這一回我們學會了如何透過程式碼對資料表進行插入(INSERT)、刪除(DELETE)及更新(UPDATE)。不知道各位有沒有想過,如果我們要新增一個供應商的欄位應該要如何設置?供應商可能包含了名字、電話及地址等資訊,這種情況我們會使用外鍵(Foreign Key)來處理,所以下一回我們將會學習外鍵的設置與使用。