使用 Python PyMySQL 驅動程式操作 MySQL 資料庫的完整範例,涵蓋連線設定、資料庫/表建立、增刪改查與交易控制。
USE mysql;
UPDATE user SET Password=PASSWORD('Oracle11g') WHERE User='root';
FLUSH PRIVILEGES;
CREATE DATABASE myfamily;
USE myfamily;
CREATE TABLE people (
id INT,
name VARCHAR(30),
age INT,
sex CHAR(1)
);
INSERT INTO people VALUES (0, 'Zihao Xu', 5, 'M');
SELECT * FROM people;
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# filename: pyMySQL.py
import pymysql
# 連線設定
conn = pymysql.connect(
host='127.0.0.1',
database='myfamily',
user='root',
password='Oracle11g',
charset='utf8mb4'
)
try:
with conn.cursor() as cursor:
# 新增
r = cursor.execute("INSERT INTO people VALUES (6, 'Bill Gates', 58, 'M')")
print(f"Insert affected rows: {r}")
# 刪除
cursor.execute("DELETE FROM people WHERE age=58")
# 交易提交
conn.commit()
# 查詢
r = cursor.execute("SELECT * FROM people")
rows = cursor.fetchall()
print("Query result:")
for row in rows:
print(row)
finally:
conn.close()
| 項目 | 說明 |
|---|---|
| 驅動程式 | PyMySQL 純 Python 實現,相容 MySQLdb API |
| 連線參數 | 建議明確指定 charset='utf8mb4' 完整支援 Unicode |
| Context Manager | with conn.cursor() 自動管理游標生命週期 |
| 交易控制 | 預設自動提交關閉,需顯式 conn.commit();異常時 conn.rollback() |
| 參數化查詢 | 使用 cursor.execute(sql, params) 防止 SQL 注入 |
| 結果獲取 | fetchone()、fetchall()、fetchmany(size) |
DBUtils.PooledDB 或 pymysqlpoolcursor = conn.cursor(pymysql.cursors.DictCursor) 回傳字典而非元組sshtunnel 建立加密連線SQLAlchemy、Tortoise ORM 或 PeeweePyMySQL 純 Python 實現、無系統依賴、部署簡單,是 Python 連接 MySQL 的主流選擇之一。