這裡介紹 Python 的 MySQLdb 模組的安裝與使用方法,查詢、新增、修改與刪除 MySQL 資料庫中的資料。

Python 的 MySQLdb 是一個 MySQL 資料庫連接模組,其內部核心是以 C 語言開發的,透過 MySQLdb 包裝成 Python 模組,以下是 MySQLdb 安裝與使用方法。

檢查與安裝 MySQLdb 模組

使用 MySQLdb 模組前,要先確認自己的 Python 是否有安裝,若沒有安裝的話,選擇一種自己喜歡的方式把 MySQLdb 模組裝起來。

檢查是否有安裝 MySQLdb 模組

檢查是否有安裝 MySQLdb 模組的方法就是直接在 Python 的環境中引入 MySQLdb 看看:

import MySQLdb

或是在 Linux 的 shell 底下執行:

python -c "import MySQLdb"

如果執行之後,沒有出現任何訊息,就代表 MySQLdb 模組已經正常安裝好了。

如果您的 Python 環境沒有安裝 MySQLdb 模組的話,就會出現這樣的錯誤訊息:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named MySQLdb

以 apt 安裝

在 Debian 或 Ubuntu Linux 中,可以用 apt 安裝:

sudo apt-get install python-mysqldb

以 pip 安裝

若要使用 pip 安裝,步驟如下:

# 安裝 pip
sudo easy_install pip
# 更新 pip
sudo pip install pip --upgrade
# 安裝編譯 MySQLdb 所需套件
sudo apt-get build-dep python-mysqldb
# 以 pip 安裝 MySQLdb
sudo pip install MySQL-python

以原始碼安裝

MySQLdb 的原始碼可以從它的官方網站下載,而編譯與安裝的如下:

sudo tar -zxvf MySQL-python-1.2.4b4.tar.gz
cd MySQL-python-1.2.4b4
python setup.py build
python setup.py install

使用 MySQLdb 模組

這裡提供幾種常用的 MySQL 資料庫操作範例程式碼。

查詢 MySQL 資料

這是以 Python 透過 MySQLdb 模組接到 MySQL 資料庫資料之後,查詢資料的範例:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# 引入 MySQLdb 模組,提供連接 MySQL 的功能
import MySQLdb

# 連接 MySQL 資料庫
db = MySQLdb.connect(host="localhost",
    user="db_user", passwd="db_pass", db="db_name")
cursor = db.cursor()

# 執行 MySQL 查詢指令
cursor.execute("SELECT * FROM db_table")

# 取回所有查詢結果
results = cursor.fetchall()

# 輸出結果
for record in results:
  col1 = record[0]
  col2 = record[1]
  print "%s, %s" % (col1, col2)

# 關閉連線
db.close()

上面這個範例是一次將所有的查詢結果都取回後,再以迴圈輸出。另一種常用的方式是一次只取回一筆查詢結果,這種方式在處理大量資料時,可以節省記憶體空間:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
db = MySQLdb.connect(host="localhost",
    user="db_user", passwd="db_pass", db="db_name")
cursor = db.cursor()
cursor.execute("SELECT * FROM db_table")

# 取得資料總筆數
rc = cursor.rowcount

# 一次取出一筆資料
for i in range(0, rc):
  record = cursor.fetchone()
  col1 = record[0]
  col2 = record[1]
  print "%s, %s" % (col1, col2)

db.close()

新增 MySQL 資料

以下是插入一筆 MySQL 資料的範例(這裡使用另一篇 MySQL/MariaDB 教學products 資料表作為示範):

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
db = MySQLdb.connect(host="localhost",
    user="db_user", passwd="db_pass",
    db="db_name", charset="utf8")
cursor = db.cursor()

# 插入資料
cursor.execute('INSERT INTO products (name, descr, price) '
        'VALUES ("葵花寶典", "蓋世武功密集", 990);')
db.commit()

db.close()

刪除 MySQL 資料

刪除 MySQL 資料的作法與新增資料類似:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
db = MySQLdb.connect(host="localhost",
    user="db_user", passwd="db_pass",
    db="db_name", charset="utf8")
cursor = db.cursor()

# 刪除資料
cursor.execute('DELETE FROM products WHERE name = "葵花寶典";')
db.commit()

db.close()

修改 MySQL 資料

這是修改 MySQL 資料的範例:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
db = MySQLdb.connect(host="localhost",
    user="db_user", passwd="db_pass",
    db="db_name", charset="utf8")
cursor = db.cursor()

# 刪除資料
cursor.execute('UPDATE products SET descr = "東方不敗的絕世武功" WHERE name = "葵花寶典";')
db.commit()

db.close()

MySQLdb 中文編碼問題

若要從 MySQL 資料庫中取回 UTF-8 編碼的中文字資料,可以在建立 MySQL 連線時加上 charset 參數:

db = MySQLdb.connect(host="localhost",
    user="db_user", passwd="db_pass",
    db="db_name", charset="utf8")

參考資料:StackOverflow