MySQL Connector/Python 教學:安裝、連線與資料庫操作完整指南

1. MySQL Connector/Python 簡介

MySQL Connector/Python 是官方提供的函式庫,用於從 Python 程式連接 MySQL 資料庫並執行各種操作。透過它可以輕鬆且高效地完成資料庫連線、查詢執行、資料讀取與更新等基本操作。其優勢在於與 MySQL 的直接整合,並遵循 Python 的資料庫 API 標準 —— DB-API 2.0,因此能提供一致的介面,讓 Python 開發者以統一的方式進行資料庫操作。

為什麼要使用 MySQL Connector/Python

使用 MySQL Connector/Python,可以進行安全的資料庫操作以防止 SQL 注入。同時,它也能結合 Python 面向物件程式設計的優勢,使資料庫操作更加高效且靈活。此外,還支援預備語句(Prepared Statement)與跳脫處理(Escape),在效能與安全性上都是理想的選擇。

2. MySQL Connector/Python 的安裝與設定

要開始使用 MySQL Connector/Python,首先需要設定開發環境。以下將說明安裝方式與環境配置。

安裝方法

MySQL Connector/Python 可以透過 Python 的套件管理工具 pip 簡單安裝。請執行以下指令:

pip install mysql-connector-python

執行後會安裝最新版本的 MySQL Connector/Python。

開發環境設定

為了提升開發效率,建議搭配整合開發環境(IDE)使用,例如 PyCharm 或 VS Code。這些 IDE 提供自動完成與除錯功能,能大幅提升開發效率。請在 IDE 中設定好 Python 直譯器,並確認可使用剛安裝的 MySQL Connector/Python。

3. 連接 MySQL

以下說明如何使用 MySQL Connector/Python 連接 MySQL 資料庫。首先需理解基本概念並設定必要的參數。

連線參數設定

連接 MySQL 資料庫時需要以下資訊:

  • host: 資料庫伺服器的主機名稱或 IP
  • user: 資料庫使用者名稱
  • password: 使用者密碼
  • database: 要連接的資料庫名稱

透過這些資訊即可呼叫 connect 函式來建立連線。

範例程式碼

以下是連接 MySQL 資料庫的基本範例:

import mysql.connector

# 建立連線
conn = mysql.connector.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)

# 確認連線是否成功
if conn.is_connected():
    print('成功連接到 MySQL 資料庫。')

# 關閉連線
conn.close()

此範例透過指定的主機、使用者名稱、密碼與資料庫名稱連接至 MySQL,並透過 is_connected() 檢查連線是否成功,最後記得使用 close() 關閉連線。

4. 基本的資料庫操作

成功建立連線後,即可進行資料庫操作,例如建立資料表、新增、查詢、更新與刪除資料。

4.1 建立資料表

以下範例示範如何建立名為 users 的資料表:

# 建立游標
cursor = conn.cursor()

# 建立資料表的 SQL
create_table_query = '''
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
)
'''

# 執行建立資料表
cursor.execute(create_table_query)

此範例會建立 users 資料表,若已存在則不會重複建立。

4.2 插入資料

以下示範如何插入新資料:

# 插入資料的 SQL
insert_data_query = '''
INSERT INTO users (username, email) VALUES (%s, %s)
'''

# 欲插入的資料
user_data = ("Tanaka", "tanaka@example.com")

# 執行插入
cursor.execute(insert_data_query, user_data)

# 提交變更
conn.commit()

此範例會將新使用者資料插入 users 資料表。

4.3 查詢資料

以下示範如何從資料表中查詢資料:

# 查詢資料的 SQL
select_query = "SELECT * FROM users WHERE username = %s"

# 執行查詢
cursor.execute(select_query, ("Tanaka",))

# 取得結果
result = cursor.fetchone()
print(result)

此範例會從 users 資料表中查詢使用者名稱為 Tanaka 的資料。

4.4 更新資料

以下示範如何更新既有資料:

# 更新資料的 SQL
update_query = "UPDATE users SET email = %s WHERE username = %s"

# 執行更新
cursor.execute(update_query, ("tanaka.new@example.com", "Tanaka"))

# 提交變更
conn.commit()

此範例會將 Tanaka 的電子郵件更新為新的地址。

4.5 刪除資料

最後,以下示範如何刪除資料:

# 刪除資料的 SQL
delete_query = "DELETE FROM users WHERE username = %s"

# 執行刪除
cursor.execute(delete_query, ("Tanaka",))

# 提交變更
conn.commit()

此範例會刪除 users 資料表中使用者名稱為 Tanaka 的紀錄。

5. 參數化查詢與預備語句

在 MySQL Connector/Python 中,透過參數化查詢(Placeholder)與預備語句(Prepared Statement)可以提升安全性與效能。這樣能降低 SQL 注入風險,並加快重複查詢的執行效率。

5.1 使用參數化查詢

使用參數化查詢能動態指定 SQL 語句中的值,並避免 SQL 注入。以下為範例:

# 查詢資料的 SQL
select_query = "SELECT * FROM users WHERE username = %s"

# 使用參數化查詢
cursor.execute(select_query, ("Tanaka",))

# 取得結果
result = cursor.fetchone()
print(result)

此範例中的 %s 為參數化佔位符,會被安全地替換成指定的值。

5.2 使用預備語句

若相同查詢需重複執行,使用預備語句可提升效能。以下為範例:

# 建立支援預備語句的游標
cursor = conn.cursor(prepared=True)

# 定義預備語句
stmt = "SELECT * FROM users WHERE username = ?"

# 執行查詢
cursor.execute(stmt, ("Tanaka",))

# 取得結果
result = cursor.fetchone()
print(result)

指定 prepared=True 後即可使用 ? 來作為佔位符,提升效能並確保安全性。

預備語句的優點

  • 安全性:防止 SQL 注入攻擊。
  • 效能:相同查詢只需解析一次,提高執行速度。

6. 跳脫處理與從連線直接執行 SQL

在產生動態 SQL 或處理包含特殊字元的資料時,需要進行跳脫處理(Escape)。MySQL Connector/Python 提供了相關函式來簡化操作。

6.1 跳脫處理

可使用連線物件的 converter.escape 來處理字串中的特殊字元:

# 跳脫處理範例
escaped_string = conn.converter.escape("O'Reilly")
print(escaped_string)  # 輸出: O'Reilly

如此即可安全處理含有引號的字串。

6.2 從連線物件直接執行 SQL

雖然通常建議使用游標,但在某些情況下也能透過 cmd_query 直接執行 SQL。不過此方法不支援參數化,需自行進行跳脫處理。

# 直接執行 SQL 查詢
stmt = "SELECT * FROM users WHERE username = '%s'"
conn.cmd_query(stmt % conn.converter.escape("Tanaka"))

由於風險較高,建議一般情況下仍使用游標與參數化查詢。

7. 錯誤處理與最佳實踐

在進行資料庫操作時,可能會發生錯誤,因此必須妥善處理錯誤並遵循最佳實踐。

7.1 錯誤處理範例

建議透過 try-except 區塊來捕捉錯誤:

import mysql.connector
from mysql.connector import Error

try:
    conn = mysql.connector.connect(
        host='localhost',
        user='your_username',
        password='your_password',
        database='your_database'
    )
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    results = cursor.fetchall()
    for row in results:
        print(row)

except Error as e:
    print(f"發生錯誤: {e}")

finally:
    if conn.is_connected():
        cursor.close()
        conn.close()
        print("MySQL 連線已關閉。")

7.2 資料庫操作的最佳實踐

  • 管理連線:資料庫連線會消耗資源,不使用時請務必關閉。
  • 使用參數化查詢:避免 SQL 注入,請使用參數化佔位符。
  • 例外處理:必須用 try-except 處理可能的錯誤。
  • 交易(Transaction):必要時使用交易確保資料一致性,支援多筆操作一併提交或回滾。

8. 總結

MySQL Connector/Python 是一個強大且實用的工具,可讓 Python 開發者輕鬆連接並操作 MySQL 資料庫。本文介紹了安裝設定、基本操作、安全強化(參數化查詢與預備語句)、跳脫處理與錯誤處理等重點。熟練這些技巧後,能夠開發更高效且安全的資料庫應用程式。

建議讀者持續深入學習 MySQL Connector/Python 的進階功能,並參考官方文件與相關資源,以發揮其最大效益。