iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
生成式 AI

AI 藥師助手:打造人人都看得懂的藥品查詢系統系列 第 14

Day 14 – 資料庫基礎:用 SQLite 儲存藥品資訊

  • 分享至 

  • xImage
  •  

前言

昨天我們完成了FAQ 自動生成,讓藥品資訊更貼近使用者的需求。但目前的資料還是寫死在程式碼裡,或是要重新爬蟲抓取,不方便維護。今天的目標是把藥品資料存進資料庫,讓專案邁向更專業的架構。

為什麼要用資料庫?

在專案初期,用 Python 的 list/dict 來存資料還行,但隨著藥品越來越多,會遇到:

  • 管理困難:資料寫死在程式,修改不方便。

  • 搜尋效率差:要自己寫迴圈比對,不夠快。

  • 資料不易共享:無法讓前端或其他系統直接存取。

因此,我選擇用 SQLite,它的特點是:

  • Python 內建支援,免安裝。

  • 資料存在 .db 檔案,攜帶方便。

  • SQL 語法通用,日後可以升級到 MySQL / PostgreSQL。

實作步驟

  1. 建立資料表
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()
  1. 查詢資料
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,都可以直接連資料庫讀資料。


上一篇
Day 13 - 藥品 FAQ 自動生成
系列文
AI 藥師助手:打造人人都看得懂的藥品查詢系統14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言