做到第 18 天,我發現我的專案已經累積了不少資訊來源:
Day 9 爬到的官方藥品資料
Day 10 的 AI 白話翻譯
Day 12 的多國語言版本
Day 16 的智慧藥品資料庫雛形
這些資料雖然能用,但分散在不同格式(JSON、字串、即時生成)中,一旦要做 FAQ 或藥品比較,就會顯得雜亂無章。
所以今天的重點就是:資料結構優化。
我決定在 SQLite 中建立一個乾淨的 drugs 資料表,欄位設計包括:藥品名稱、成分、用途、副作用、注意事項,還有一個 translations 欄位專門存多國語言的 JSON。
import sqlite3
import json
# 建立/連線到 SQLite 資料庫
conn = sqlite3.connect("medicine.db")
cursor = conn.cursor()
# 建立藥品資料表
cursor.execute("""
CREATE TABLE IF NOT EXISTS drugs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
drug_name TEXT UNIQUE,
ingredients TEXT,
uses TEXT,
side_effects TEXT,
warnings TEXT,
translations TEXT
);
""")
conn.commit()
print("資料表建立完成!")
# 假設這是 Day 9 ~ Day 12 拿到的整理資料
drug_data = {
"drug_name": "普拿疼",
"ingredients": "Acetaminophen 500mg",
"uses": "緩解輕至中度疼痛,如頭痛、牙痛、肌肉痛、經痛",
"side_effects": "肝功能異常、皮疹、噁心、過量服用可能導致肝毒性",
"warnings": "避免與酒精同時使用,避免長期大量服用",
"translations": json.dumps({
"en": {
"name": "Panadol",
"uses": "Relieves mild to moderate pain such as headache, toothache, muscle pain, menstrual pain",
"warnings": "Avoid alcohol, do not take in large amounts for a long time"
},
"jp": {
"name": "パナドール",
"uses": "頭痛、歯痛、筋肉痛、生理痛の緩和",
"warnings": "アルコールと併用しないでください"
}
}, ensure_ascii=False)
}
# 插入資料
cursor.execute("""
INSERT OR REPLACE INTO drugs (drug_name, ingredients, uses, side_effects, warnings, translations)
VALUES (:drug_name, :ingredients, :uses, :side_effects, :warnings, :translations)
""", drug_data)
conn.commit()
print("藥品資料已插入!")
# 查詢普拿疼資料
cursor.execute("SELECT * FROM drugs WHERE drug_name=?", ("普拿疼",))
result = cursor.fetchone()
print("\n 查詢結果:")
print(f"ID: {result[0]}")
print(f"藥品名稱: {result[1]}")
print(f"成分: {result[2]}")
print(f"用途: {result[3]}")
print(f"副作用: {result[4]}")
print(f"注意事項: {result[5]}")
t(f"翻譯: {result[6]}")
conn.close()