2025年3月7日 星期五

Python 讀寫 SQLite(Docker 最簡單範例)

 

Python 讀寫 SQLite(Docker 最簡單範例)

這是一個 最簡單的 Python 程式,可以在 Docker 容器中讀取與寫入 SQLite 資料庫。


1. 建立專案目錄

首先,在 Windows 命令提示字元 (cmd) 或 PowerShell 建立專案資料夾:

mkdir C:\sqlite_docker
cd C:\sqlite_docker

2. 建立 Python 讀寫 SQLite 檔案

C:\sqlite_docker 內建立 app.py

import sqlite3

# 設定 SQLite 資料庫檔案
DB_FILE = "test.db"

# 連接資料庫(如果不存在則自動建立)
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()

# 建立表格(如果不存在)
cursor.execute('''
    CREATE TABLE IF NOT EXISTS messages (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        text TEXT NOT NULL
    )
''')

# 插入測試資料
cursor.execute("INSERT INTO messages (text) VALUES (?)", ("Hello, SQLite in Docker!",))
conn.commit()

# 讀取所有資料
cursor.execute("SELECT * FROM messages")
rows = cursor.fetchall()

# 顯示結果
print("=== SQLite 資料庫內容 ===")
for row in rows:
    print(row)

# 關閉連接
conn.close()

3. 建立 Dockerfile

C:\sqlite_docker 內建立 Dockerfile

# 使用 Python 3.10 作為基礎映像
FROM python:3.10

# 設定工作目錄
WORKDIR /app

# 複製當前目錄的所有檔案到容器內
COPY . .

# 安裝 SQLite3(Python 內建支援,不需要額外安裝)
# 確保資料庫文件存在
RUN touch test.db

# 執行 Python 腳本
CMD ["python", "app.py"]

4. 建立 Docker 映像檔

回到 PowerShell,進入 C:\sqlite_docker

cd C:\sqlite_docker

執行:

docker build -t sqlite_test .

這會 建立 Docker 映像檔,名稱為 sqlite_test


5. 運行 Docker 容器

docker run --rm -v C:\sqlite_docker:/app sqlite_test

這樣:

  • --rm:執行結束後自動刪除容器
  • -v C:\sqlite_docker:/app:將本機目錄掛載到容器,確保 SQLite 資料庫 test.db 可持久保存

預期輸出:

=== SQLite 資料庫內容 ===
(1, 'Hello, SQLite in Docker!')

這代表:

  • 成功建立 test.db
  • 寫入了一筆測試數據
  • 成功讀取數據

6. 檢查 SQLite 資料庫

如果你想檢查 test.db 內的內容,執行:

sqlite3 C:\sqlite_docker\test.db

然後在 SQLite 交互模式中輸入:

SELECT * FROM messages;

你應該會看到:

1|Hello, SQLite in Docker!

輸入 .exit 離開 SQLite。


7. 停止 & 刪除容器

因為我們用了 --rm,所以容器執行完畢後會自動刪除。 如果你想讓容器持續運行,請改用:

docker run -d -p 5000:5000 -v C:\sqlite_docker:/app sqlite_test

然後用:

docker ps

來查看運行中的容器。


🚀 總結

這個範例使用 Python 讀寫 SQLite,並執行在 Docker 容器中
SQLite 資料庫 (test.db) 存放在本機 (C:\sqlite_docker),確保資料不會因容器刪除而遺失
Dockerfile 非常簡單,只需 Python + SQLite 即可運行

這樣你的 Python + SQLite + Docker 最簡單範例就完成了!🚀

沒有留言:

張貼留言