Python 操作 MySQL 是後端開發的核心技能。本文將從底層的 MySQLdb 驅動程式講起,涵蓋連線、CRUD 操作、參數化查詢、事務控制,最後介紹 Django ORM 的優雅用法,幫助你建立扎實的資料庫操作基礎。
安裝 Python 專用的 MySQL 驅動(舊版為 MySQL-python,現代建議使用 mysqlclient 或 PyMySQL):
pip install mysqlclient
import MySQLdb
conn = MySQLdb.connect(
host="localhost",
user="root",
passwd="your_password",
db="mydatabase",
charset="utf8"
)
cursor = conn.cursor()
| 類別 | 方法 | 說明 |
|---|---|---|
| 執行命令 | execute(sql, params) | 執行單條 SQL,回傳影響行數 |
executemany(sql, seq_params) | 批次執行同一條 SQL,參數為序列 | |
callproc(procname, args) | 呼叫預存程序 | |
nextset() | 移動至下一個結果集 | |
| 接收結果 | fetchone() | 取得單筆記錄 |
fetchmany(size) | 取得指定筆數記錄 | |
fetchall() | 取得所有記錄 | |
scroll(value, mode) | 移動游標位置 |
# 單筆插入(佔位符永遠用 %s)
sql = "INSERT INTO cdinfo (title, singer, img, url, alpha) VALUES (%s, %s, %s, %s, %s)"
param = (title, singer, imgurl, url, alpha)
cursor.execute(sql, param)
# 批次插入
params = [
(title1, singer1, img1, url1, alpha1),
(title2, singer2, img2, url2, alpha2)
]
cursor.executemany(sql, params)
# 查詢
cursor.execute("SELECT * FROM cdinfo")
rows = cursor.fetchall()
print(rows[0][3]) # 取得第一筆第 4 欄資料
# 關鍵:必須 commit 才會真正寫入資料庫
conn.commit()
cursor.close()
conn.close()
Django 內建強大的 ORM 系統,在 settings.py 設定資料庫連線後,即可透過 Model 類別進行物件導向操作:
# models.py
class CdInfo(models.Model):
title = models.CharField(max_length=100)
singer = models.CharField(max_length=50)
# ...
# views.py 或 shell
CdInfo.objects.create(title="New Album", singer="Artist")
albums = CdInfo.objects.filter(singer="Artist")
for a in albums:
print(a.title)
ORM 自動處理 SQL 拼接、防注入、連線池等細節,大幅提升開發效率與安全性。
掌握 MySQLdb 底層操作有助於理解資料庫交互原理,實際專案中強烈建議使用 Django ORM 或 SQLAlchemy 等高階工具,專注於業務邏輯而非 SQL 細節。