iT邦幫忙

1

Day 11:CSV 與 SQLite——學習儲存與讀取健康資料

  • 分享至 

  • xImage
  •  

一、前言

在前幾天的自主學習中,我學習了 Python 的基本資料型態、List 與 Dictionary,並進一步使用 Pandas 將多筆健康紀錄整理成 DataFrame,完成基本的資料查看與統計練習。

然而,目前的健康紀錄主要儲存在程式執行期間的變數中。如果程式結束,這些資料通常就不會自動保留下來。對於需要長期追蹤每日飲水量、睡眠時間及運動習慣的系統而言,資料保存是非常重要的一環。

因此,今天將認識 CSV 與 SQLite 兩種資料保存方式,了解如何將健康紀錄儲存到程式以外的位置,並在需要時重新讀取資料。

二、認識 CSV 與 SQLite

  1. CSV 是什麼?

CSV 是一種常見的文字檔案格式,全名為 Comma-Separated Values,通常以逗號分隔不同欄位的資料。

例如,一份健康紀錄 CSV 檔案可以呈現如下:

date,water_intake,sleep_hours,exercise_minutes,ate_fruit
2026-10-21,1500,7.0,20,True
2026-10-22,1800,7.5,30,True
2026-10-23,2000,8.0,45,False

CSV 的優點是格式簡單,可以使用文字編輯器開啟,也能利用 Excel 或其他試算表軟體查看。對於初學者而言,它是練習資料保存與讀取的好方法。

  1. SQLite 是什麼?

SQLite 是一種輕量型的關聯式資料庫,不需要另外架設資料庫伺服器,就能將資料保存於資料庫檔案中。

與 CSV 相比,SQLite 可以利用資料表組織資料,並透過 SQL 語法進行新增、查詢、修改及刪除等操作。

例如,未來的健康習慣追蹤系統可能需要依日期查詢紀錄,或修改某一天輸入錯誤的飲水量,這些工作都可以透過 SQLite 進行。

三、使用 Pandas 儲存與讀取 CSV

首先,我會使用前一天學過的 Pandas,將健康紀錄儲存成 CSV 檔案。

import pandas as pd

health_records = [
{
"date": "2026-10-21",
"water_intake": 1500,
"sleep_hours": 7.0,
"exercise_minutes": 20,
"ate_fruit": True
},
{
"date": "2026-10-22",
"water_intake": 1800,
"sleep_hours": 7.5,
"exercise_minutes": 30,
"ate_fruit": True
},
{
"date": "2026-10-23",
"water_intake": 2000,
"sleep_hours": 8.0,
"exercise_minutes": 45,
"ate_fruit": False
}
]

df = pd.DataFrame(health_records)

將資料保存成 CSV 檔案

df.to_csv("health_records.csv", index=False, encoding="utf-8-sig")

print("健康紀錄已保存!")

這段程式會將 DataFrame 寫入 health_records.csv 檔案。

其中,index=False 表示不額外輸出 Pandas 的列索引,而 encoding="utf-8-sig" 則有助於使用 Excel 開啟含有中文的 CSV 檔案時,正確顯示文字。

接著,可以使用以下程式重新讀取資料:

import pandas as pd

df = pd.read_csv("health_records.csv")

print(df)

如果檔案存在於程式目前的工作目錄中,程式就能重新載入資料,並將其轉換成 DataFrame。

四、使用 SQLite 儲存與讀取健康資料

除了 CSV,也可以利用 Python 內建的 sqlite3 模組建立簡單的資料庫。

以下示範如何建立資料表,並新增一筆健康紀錄:

import sqlite3

建立或開啟資料庫檔案

conn = sqlite3.connect("health.db")
cursor = conn.cursor()

建立健康紀錄資料表

cursor.execute("""
CREATE TABLE IF NOT EXISTS health_records (
date TEXT PRIMARY KEY,
water_intake INTEGER,
sleep_hours REAL,
exercise_minutes INTEGER,
ate_fruit INTEGER
)
""")

新增一筆測試紀錄

cursor.execute("""
INSERT OR REPLACE INTO health_records
(date, water_intake, sleep_hours, exercise_minutes, ate_fruit)
VALUES (?, ?, ?, ?, ?)
""", ("2026-10-24", 1700, 7.5, 25, 1))

儲存變更

conn.commit()

查詢所有健康紀錄

cursor.execute("SELECT * FROM health_records")
records = cursor.fetchall()

for record in records:
print(record)

conn.close()

這段程式會建立或開啟 health.db 資料庫檔案,並在其中建立健康紀錄資料表。

在這個範例中,TEXT 用來儲存日期,INTEGER 用來儲存整數,REAL 則用來儲存可能包含小數的睡眠時間。蔬果攝取情形以 1 代表有、0 代表沒有。

另外,conn.commit() 用來提交資料變更,而 fetchall() 則會取得查詢結果。完成操作後,使用 conn.close() 關閉資料庫連線。

這裡使用 INSERT OR REPLACE,是因為日期被設定為主鍵;若同一天的紀錄再次寫入,原本同日期的資料會被取代。實際系統未來可以再設計更明確的新增與修改流程。

五、CSV 與 SQLite 的差異

https://ithelp.ithome.com.tw/upload/images/20261023/20178903IyO4n6cP2U.png

透過比較可以發現,CSV 適合簡單地保存與交換資料,而 SQLite 更適合需要管理、查詢及修改多筆紀錄的情境。

本專案可以先透過 CSV 理解檔案保存的原理,再學習 SQLite,為之後建立具有資料保存功能的健康習慣追蹤系統做好準備。

六、Day 11 實作步驟

使用 Pandas 建立一份健康紀錄 DataFrame。

使用 to_csv() 將資料儲存為 CSV 檔案。

使用 read_csv() 重新讀取檔案,確認資料可以正常載入。

使用 sqlite3 建立 SQLite 資料庫與健康紀錄資料表。

練習新增一筆健康紀錄,並使用 SELECT 查詢資料。

關閉程式後重新執行讀取流程,確認先前保存的資料仍然存在。

七、今日成果

今天學習了 CSV 與 SQLite 兩種資料保存方式,並練習使用 Pandas 將健康紀錄輸出及讀取為 CSV 檔案,也使用 Python 的 sqlite3 模組建立資料庫、建立資料表、新增紀錄與查詢資料。

透過這次練習,我了解到,資料的保存與讀取是健康習慣追蹤系統的重要基礎。只有將資料持續保存下來,才能累積多天的紀錄,並在未來進行歷史查詢與健康習慣統計。

下一天將學習資料驗證,思考當使用者輸入空白欄位、錯誤格式或不合理的數值時,系統應該如何處理,讓健康紀錄更加完整且可靠。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言