早期 Windows 安裝 MySQL-python (即 mysqlclient 前身) 需要 Visual C++ 編譯器、MySQL C API 開發包,極易踩坑。現今推薦使用純 Python 實現的驅動,零編譯、安裝即用:
pip install PyMySQL
import pymysql
pymysql.install_as_MySQLdb() # 讓舊代碼 `import MySQLdb` 也能跑
conn = pymysql.connect(
host='localhost', port=3306,
user='root', password='password',
database='test_db', charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
with conn.cursor() as cur:
cur.execute("SELECT VERSION()")
print(cur.fetchone())
# 訪問 https://pypi.org/project/mysqlclient/#files
# 下載對應 Python 版本、系統架構的 .whl 文件
# 例如:mysqlclient-2.2.0-cp311-cp311-win_amd64.whl
pip install mysqlclient-2.2.0-cp311-cp311-win_amd64.whl
https://www.codegood.com/archives/129 (文中原連結,現多失效)pip install SQLAlchemy PyMySQL
from sqlalchemy import create_engine, text
engine = create_engine('mysql+pymysql://user:pass@localhost:3306/db?charset=utf8mb4')
with engine.connect() as conn:
result = conn.execute(text("SELECT VERSION()"))
print(result.fetchone())
| 現象 | 原因 | 解決 |
|---|---|---|
ModuleNotFoundError: No module named 'MySQLdb' | 舊代碼用 import MySQLdb | 安裝 mysqlclient 或用 pymysql.install_as_MySQLdb() |
Authentication plugin 'caching_sha2_password' not supported | MySQL 8.0 新認證插件 | 驅動升級至最新版、或建立用戶指定 mysql_native_password |
Can't connect to MySQL server on 'localhost' (10061) | 服務未啟動/防火牆/端口錯誤 | 檢查服務、netstat -an | findstr 3306、bind-address |
| 中文亂碼 | 連接字符集未指定 | 連接參數加 charset='utf8mb4'、表/庫字符集統一 utf8mb4 |
python -m venv venv
venv\Scripts\activate
pip install --upgrade pip
pip install PyMySQL SQLAlchemy # 或 mysqlclient
pip freeze > requirements.txt
Windows 下 Python 連 MySQL,首選 PyMySQL,純 Python 無編譯依賴、API 兼容、維護活躍。需極致效能時再考慮 mysqlclient 官方輪包。配合 SQLAlchemy ORM、虛擬環境、utf8mb4 字符集,構建穩健的資料庫訪問層。