文章

第28天:資料庫操作

課程簡介

資料庫是應用程式儲存和管理資料的重要組件。Python 提供了多種方式來操作資料庫,最常見的是使用 sqlite3 模組來處理 SQLite 資料庫,或使用外部套件如 MySQL Connectorpsycopg2 來連接 MySQL 和 PostgreSQL 資料庫。今天的課程將介紹如何使用 sqlite3 進行基礎的資料庫操作。


學習內容

1. 什麼是 SQLite 資料庫

SQLite 是一種輕量級的關聯式資料庫,不需要伺服器支援,非常適合開發和測試。Python 中內建了 sqlite3 模組,便於快速進行資料庫操作。


2. 連接到 SQLite 資料庫

可以使用 sqlite3.connect() 函數連接或創建一個 SQLite 資料庫,並使用 cursor 來執行 SQL 語句。

範例:

1
2
3
4
5
import sqlite3

# 連接到資料庫(如果不存在則創建)
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

3. 創建資料表

使用 SQL 的 CREATE TABLE 語句創建資料表。以下範例建立一個 users 資料表,包含用戶 ID、名稱和年齡等欄位。

範例:

1
2
3
4
5
6
7
8
9
# 創建資料表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER
    )
''')
conn.commit()  # 提交更改

4. 插入資料

使用 INSERT INTO 語句插入資料。

範例:

1
2
3
4
5
6
7
8
# 插入單筆資料
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 30))
conn.commit()

# 插入多筆資料
users = [("Bob", 25), ("Charlie", 35)]
cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", users)
conn.commit()

5. 查詢資料

使用 SELECT 語句查詢資料。

範例:

1
2
3
4
5
6
7
8
9
10
# 查詢所有資料
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
    print(row)

# 查詢特定條件的資料
cursor.execute("SELECT * FROM users WHERE age > ?", (30,))
filtered_results = cursor.fetchall()
print("年齡大於 30 的用戶:", filtered_results)

6. 更新資料

使用 UPDATE 語句更新資料。

範例:

1
2
3
# 將名稱為 "Alice" 的用戶年齡更新為 31
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (31, "Alice"))
conn.commit()

7. 刪除資料

使用 DELETE 語句刪除資料。

範例:

1
2
3
# 刪除年齡小於 30 的用戶
cursor.execute("DELETE FROM users WHERE age < ?", (30,))
conn.commit()

8. 使用上下文管理器(with 語句)

使用 with 語句可以確保在完成操作後自動關閉資料庫連接,這樣能防止資料庫資源被佔用。

範例:

1
2
3
4
5
6
with sqlite3.connect('example.db') as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    results = cursor.fetchall()
    for row in results:
        print(row)

9. 使用 Python 變數構建 SQL 查詢

可以使用變數作為 SQL 查詢的參數,注意避免直接拼接字符串,這樣可以防止 SQL 注入攻擊。

範例:

1
2
3
4
user_name = "Alice"
cursor.execute("SELECT * FROM users WHERE name = ?", (user_name,))
result = cursor.fetchone()
print("查詢結果:", result)

教學重點

  • 資料庫連接與建立資料表:理解如何使用 sqlite3 連接 SQLite 資料庫並創建資料表。
  • 增刪改查(CRUD)操作:掌握資料庫的基本操作,包括插入、查詢、更新和刪除。
  • 使用上下文管理器:學會使用 with 語句管理資料庫連接。
  • 防止 SQL 注入:通過使用參數化查詢,避免 SQL 注入風險。

任務

  1. 創建一個包含產品名稱和價格的資料表,並插入幾筆測試資料。
  2. 查詢資料表中價格大於某個值的產品,並顯示其名稱和價格。
  3. 更新某個產品的價格,並驗證更新後的結果。
  4. 刪除價格低於某個值的產品。
本文章以 CC BY 4.0 授權