昨天我們完成了FAQ 自動生成,讓藥品資訊更貼近使用者的需求。但目前的資料還是寫死在程式碼裡,或是要重新爬蟲抓取,不方便維護。今天的目標是把藥品資料存進資料庫,讓專案邁向更專業的架構。
在專案初期,用 Python 的 list/dict 來存資料還行,但隨著藥品越來越多,會遇到:
管理困難:資料寫死在程式,修改不方便。
搜尋效率差:要自己寫迴圈比對,不夠快。
資料不易共享:無法讓前端或其他系統直接存取。
因此,我選擇用 SQLite,它的特點是:
Python 內建支援,免安裝。
資料存在 .db 檔案,攜帶方便。
SQL 語法通用,日後可以升級到 MySQL / PostgreSQL。
import sqlite3
conn = sqlite3.connect("drugs.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS drugs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
ingredient TEXT,
usage TEXT,
side_effects TEXT,
precautions TEXT
)
""")
conn.commit()
conn.close()
這樣就有一張 drugs 表格,能存藥品基本資料。
2. 插入資料
drugs = [
{
"name": "普拿疼",
"ingredient": "Acetaminophen 500mg",
"usage": "緩解輕至中度疼痛,如頭痛、牙痛、肌肉痛、經痛",
"side_effects": "肝功能異常、皮疹、噁心、過量服用可能導致肝毒性",
"precautions": "避免與酒精同時使用,避免長期大量服用"
},
{
"name": "布洛芬",
"ingredient": "Ibuprofen 200mg",
"usage": "緩解發炎或疼痛,如肌肉痛、關節痛、牙痛",
"side_effects": "胃不適、頭晕、過敏反應",
"precautions": "飯後服用,避免與酒精同時使用"
}
]
conn = sqlite3.connect("drugs.db")
cursor = conn.cursor()
for d in drugs:
cursor.execute("""
INSERT INTO drugs (name, ingredient, usage, side_effects, precautions)
VALUES (?, ?, ?, ?, ?)
""", (d["name"], d["ingredient"], d["usage"], d["side_effects"], d["precautions"]))
conn.commit()
conn.close()
conn = sqlite3.connect("drugs.db")
cursor = conn.cursor()
cursor.execute("SELECT name, usage FROM drugs WHERE name = ?", ("普拿疼",))
result = cursor.fetchone()
print(result)
conn.close()
輸出結果:
('普拿疼', '緩解輕至中度疼痛,如頭痛、牙痛、肌肉痛、經痛')
今天把藥品資料搬進 SQLite 資料庫後,最大的收穫是:
資料更有彈性:之後只要新增藥品,不用改程式。
查詢更方便:直接用 SQL 找資料,比 Python for 迴圈快。
擴展性更好:未來要做搜尋、翻譯、FAQ,都可以直接連資料庫讀資料。