Python 與 MySQL 整合教學:從環境設定到資料庫操作完整指南

1. Python 與 MySQL 的整合:入門

Python 是一種非常靈活的程式語言,可以與各種資料庫管理系統(DBMS)整合。特別是 MySQL,作為一個廣泛使用的開源關聯式資料庫,搭配 Python 使用時能實現強大的資料操作。

本文將介紹如何使用 Python 連接 MySQL,並執行基本的資料庫操作(新增、查詢、更新、刪除)。

2. MySQL 與 Python 整合所需的環境設定

首先需要建立 Python 與 MySQL 的整合環境。本節將說明必要的軟體安裝方式與設定方法。

2.1 安裝 MySQL

MySQL 的安裝方式依作業系統而異,以下是各 OS 的簡單安裝方法:

  • Windows:從 MySQL 官方網站下載安裝程式,依指引完成安裝。
  • Mac:透過 Homebrew 執行 brew install mysql 指令安裝。
  • Linux:在 Debian 系統可使用 sudo apt-get install mysql-server 安裝。

2.2 Python 環境設定

接著在 Python 環境中安裝必要的套件,以便與 MySQL 連接。常用的套件有:

  • mysql-connector-python:由 Oracle 提供的官方 MySQL 連接套件。
  • PyMySQL:純 Python 實作,與 MySQLdb 相容的套件。

安裝方式很簡單,只需執行以下指令:

pip install mysql-connector-python

若使用 PyMySQL,則執行:

pip install pymysql

2.3 套件的差異

mysql-connector-python 是官方套件,效能與支援度較完整;而 PyMySQL 較輕量,適合需要 MySQLdb 相容功能的專案。選擇哪一個取決於專案需求。

3. 使用 Python 連接 MySQL 的基本步驟

透過 Python 連接 MySQL 非常簡單。本節將說明如何使用 Python 連接 MySQL 並操作資料表。

3.1 連接 MySQL 資料庫

以下是使用 mysql-connector-python 連接 MySQL 的範例程式碼:

import mysql.connector

# MySQL 連線資訊
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='test_db'
)

# 測試連線
if conn.is_connected():
    print("成功連線至 MySQL 伺服器!")

此程式使用 mysql.connector.connect() 函數連接本地端的 MySQL 伺服器,若成功則會輸出確認訊息。

4. 基本的 SQL 操作

成功連接 MySQL 後,就可以進行基本的 SQL 操作。本節將介紹資料的新增、查詢、更新與刪除方法。

4.1 新增資料

要將新資料插入資料表,可以使用以下 SQL 指令:

cursor = conn.cursor()

# 新增資料的查詢
insert_query = "INSERT INTO users (username, email) VALUES (%s, %s)"
data = ("user1", "user1@example.com")

# 執行查詢
cursor.execute(insert_query, data)

# 確認變更
conn.commit()

4.2 查詢資料

要取得資料可使用 SELECT 語句。以下範例將查詢所有使用者資訊:

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

# 輸出結果
for row in rows:
    print(row)

4.3 更新資料

要修改既有資料,可以使用 UPDATE 語句:

update_query = "UPDATE users SET email = %s WHERE username = %s"
cursor.execute(update_query, ("new_email@example.com", "user1"))
conn.commit()

4.4 刪除資料

要刪除不需要的資料,可以使用 DELETE 語句:

delete_query = "DELETE FROM users WHERE username = %s"
cursor.execute(delete_query, ("user1",))
conn.commit()

5. 進階操作

接下來介紹更進階的操作,例如交易(Transaction)管理與預備語句(Prepared Statement)。

5.1 交易管理

若要一次執行多個操作,並在需要時回滾(Rollback),可以使用交易:

try:
    cursor.execute("...")
    conn.commit()  # 成功則提交
except:
    conn.rollback()  # 發生錯誤則回滾

5.2 使用預備語句

為了防止 SQL 注入,建議使用預備語句:

stmt = "SELECT * FROM users WHERE username = %s"
cursor.execute(stmt, ("user1",))

6. MySQL 與 Python 的實際應用範例

結合 Python 與 MySQL 可以開發出各種實用的應用程式。本節將透過案例展示如何活用這兩者。

6.1 建立使用者管理系統

使用者管理系統是 Python 與 MySQL 常見的應用案例。以下介紹簡單的設計:

步驟 1:建立使用者資料表

首先建立一個資料表,用來儲存使用者資訊:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL
);

步驟 2:新增使用者註冊功能

以下 Python 程式會透過 INSERT 將新使用者資料寫入資料庫:

import mysql.connector

# 連線至 MySQL
conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
cursor = conn.cursor()

# 新增使用者資料
insert_query = "INSERT INTO users (username, email, password) VALUES (%s, %s, %s)"
user_data = ("user123", "user123@example.com", "securepassword")
cursor.execute(insert_query, user_data)

# 確認變更
conn.commit()

# 關閉連線
cursor.close()
conn.close()

步驟 3:登入功能

也可以實作登入驗證功能:

# 登入驗證
login_query = "SELECT * FROM users WHERE username = %s AND password = %s"
login_data = ("user123", "securepassword")
cursor.execute(login_query, login_data)

user = cursor.fetchone()
if user:
    print("登入成功")
else:
    print("登入失敗")

6.2 在資料分析中的應用

將 MySQL 作為資料儲存庫,再搭配 Python 的分析套件,可以進行資料科學與分析。以下以 Pandas 為例:

步驟 1:從 MySQL 取得資料

import mysql.connector
import pandas as pd

# 連線至 MySQL
conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
cursor = conn.cursor()

# 取得資料並轉換為 DataFrame
query = "SELECT * FROM users"
cursor.execute(query)
rows = cursor.fetchall()

df = pd.DataFrame(rows, columns=['id', 'username', 'email', 'password'])

# 檢視資料
print(df.head())

# 關閉連線
cursor.close()
conn.close()

步驟 2:資料彙總與分析

# 統計不同 email 網域的使用者數量
df['domain'] = df['email'].apply(lambda x: x.split('@')[1])
domain_count = df['domain'].value_counts()

print(domain_count)

如此即可將 MySQL 作為後端資料庫,再結合 Pandas 等工具進行資料分析。

7. 總結與下一步

本文介紹了 Python 與 MySQL 的整合:從基本的連線、SQL 操作,到使用者管理系統範例,以及結合 Pandas 進行資料分析。這項技術是建構 Web 應用與資料處理基礎的重要工具。

7.1 下一步建議

學完本文的基礎內容後,可以繼續探索:

  • 整合 Django 或 Flask:使用 Python Web 框架建立更進階的應用。
  • 資料庫優化:學習 MySQL 的索引與查詢最佳化,提升效能。
  • 大數據分析:透過 Python 對 MySQL 資料進行機器學習與大規模分析。