Python 操作 MySQL 的5種方式
1、MySQLdb
MySQLdb又叫MySQL-python ,是 Python 連線 MySQL 最流行的一個驅動,很多框架都也是基於此庫進行開發,遺憾的是它只支援 Python2.x,而且安裝的時候有很多前置條件,因為它是基於C開發的庫,在 Windows 平臺安裝非常不友好,經常出現失敗的情況,現在基本不推薦使用,取代的是它的衍生版本。
1 2 3 4 5 6 |
# 前置條件
sudo
apt-get
install
python-dev libmysqlclient-dev
# Ubuntu
sudo
yum
install
python-devel mysql-devel
# Red Hat / CentOS # 安裝
pip
install
MySQL-python
Windows 直接通過下載 exe 檔案安裝
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/python
import
MySQLdb
db
=
MySQLdb.connect(
host
=
"localhost"
,
# 主機名
user
=
"root"
,
# 使用者名稱
passwd
=
"pythontab.com"
,
# 密碼
db
=
"testdb"
)
# 資料庫名稱
# 查詢前,必須先獲取遊標
cur
=
db.cursor()
# 執行的都是原生SQL語句
cur.execute(
"SELECT * FROM mytable"
)
for
row
in
cur.fetchall():
print
(row[
0
])
db.close()
|
2、mysqlclient
由於 MySQL-python(MySQLdb) 年久失修,後來出現了它的 Fork 版本 mysqlclient,完全相容 MySQLdb,同時支援 Python3.x,是 Django ORM的依賴工具,如果你想使用原生 SQL 來操作資料庫,那麼推薦此驅動。安裝方式和 MySQLdb 是一樣的,Windows 可以在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 網站找到 對應版本的 whl 包下載安裝。
1 2 |
# Windows安裝
pip
install
some-package.whl
|
1 2 3 4 5 |
# linux 前置條件
sudo
apt-get
install
python3-dev
# debian / Ubuntu
sudo
yum
install
python3-devel
# Red Hat / CentOS
brew
install
mysql-connector-c
# macOS (Homebrew)
pip
install
mysqlclient
|
3、PyMySQL
PyMySQL 是純 Python 實現的驅動,速度上比不上 MySQLdb,最大的特點可能就是它的安裝方式沒那麼繁瑣,同時也相容 MySQL-python
1 2 3 |
pip
install
PyMySQL
# 為了相容mysqldb,只需要加入
pymysql.install_as_MySQLdb()
|
例子:
1 2 3 4 5 6 7 8 |
import
pymysql
conn
=
pymysql.connect(host
=
'127.0.0.1'
, user
=
'root'
, passwd
=
"pythontab.com"
, db
=
'testdb'
)
cur
=
conn.cursor()
cur.execute(
"SELECT Host,User FROM user"
)
for
r
in
cur:
print
(r)
cur.close()
conn.close()
|
4、peewee
寫原生 SQL 的過程非常繁瑣,程式碼重複,沒有面向物件思維,繼而誕生了很多封裝 wrapper 包和 ORM 框架,ORM 是 Python 物件與資料庫關係表的一種對映關係,有了 ORM 你不再需要寫 SQL 語句。提高了寫程式碼的速度,同時相容多種資料庫系統,如sqlite, mysql、postgresql,付出的代價可能就是效能上的一些損失。如果你對 Django 自帶的 ORM 熟悉的話,那麼 peewee的學習成本幾乎為零。它是 Python 中是最流行的 ORM 框架。
安裝
1 |
pip
install
peewee
|
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import
peewee
from
peewee
import
*
db
=
MySQLDatabase(
'testdb'
, user
=
|