Python3でMySQLに接続する環境をLinuxで整える
2016-03-06
2024-03-25
こんにちは。今回のテーマは『Python3でMySQLに接続する環境をLinuxで整える』です。Python3でDjangoを使おうとしたらMySQLとの接続に手こずってしまいました。ネットで出てくる情報もPython2.x系の記事が多く、まだまだPython3.x系は普及している感じがないと思いながら記事を書きました。
[adsense02]
MySQL for Pythonが使えない
Python用のMySQLドライバといえばMySQL for python(mysql-python)が有名で、このドライバを使用している方も多いと思います。ネット上でもmysql-pythonを使用する例が多く出てくるのですが、これは2.x向けの記事であり、Python3では使うことができません。今回はPython3で使用可能なMySQLドライバmysqlclientとmysql-connector-phythonの導入と仕様例を紹介したいと思います。
筆者の環境
以下が筆者の環境です。LinuxディストリビューションはArch Linuxを中心に検証しました。
- Python(3.5.1)
- Django (1.9.2)
- pip (8.0.3)
- setuptools (20.2.2)
練習用のデータベースを用意する
本題から逸れるのでMySQLの使い方には細かく触れません。今回は練習用のデータベースに以下ようなテーブルを用意しました。
+----+--------------+ | id | name | +----+--------------+ | 1 | 桂小五郎 | | 2 | 板垣退助 | | 3 | 坂本龍馬 | | 4 | 西郷隆盛 | | 5 | 高杉晋作 | +----+--------------+
mysqlclientを使用する
インストール
今回はpipを使用してインストールします。
root# pip3 install mysqlclient
Debianの場合はmysql_config not foundというエラーが出るかも知れません。その場合は以下のコマンドを実行して下さい。
$ sudo apt-get install libmysqlclient-dev
ディストリビューションのパッケージを使う場合
Debian
上記の通りlibmysqlclient-devをインストールした後にpipを使用してインストールして下さい。
Arch Linux
以下コマンドでAURよりインストールして下さい。
$ yaourt -S python-mysqlclient
Fedora
以下コマンドでインストールして下さい。
$ sudo dnf install python3-mysql
mysqlclientを使用してみる
以下のようなコードを用意してみました。
import MySQLdb
def showUser():
connector = MySQLdb.connect(
user='USER_NAME',
passwd='PASSWORD',
host='localhost',
db='DATABASE_NAME')
cursor = connector.cursor()
cursor.execute("select * from tbl_user")
for row in cursor.fetchall():
print("ID:" + str(row[0]) + " NAME:" + row[1])
cursor.close
connector.close
if __name__ == "__main__":
showUser()
【実行結果】
ID:1 NAME:桂小五郎 ID:2 NAME:板垣退助 ID:3 NAME:坂本龍馬 ID:4 NAME:西郷隆盛 ID:5 NAME:高杉晋作
Djangoで使用する場合
setting.pyのDATABASEの項目を以下のように設定して下さい。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE_NAME',
'USER': 'USER_NAME',
'PASSWORD': 'PASSWORD',
'HOST': 'localhost',
}
}
mysql-connector-pythonを使用する
インストール
以下コマンドでpipを使用してインストールします。
root# pip3 install mysql-connector-python
ディストリビューションのパッケージを使う場合
Debian
$ sudo apt-get install python3-mysql.connector
Arch Linux
$ sudo pacman -S python-mysql-connector
Fedora
$ sudo dnf install mysql-connector-python3
mysql-connector-pythonを使ってみる
mysql.connectorをインポートして使用します。以下のようなコードを用意してみました。
import mysql.connector
def showUser():
connector = mysql.connector.connect(
user='USER_NAME',
password='PASSWORD',
host='localhost',
database='DATABASE_NAME')
cursor = connector.cursor()
cursor.execute("select * from tbl_user")
for row in cursor.fetchall():
print("ID:" + str(row[0]) + " NAME:" + row[1])
cursor.close
connector.close
if __name__ == "__main__":
showUser()
【実行結果】
ID:1 NAME:桂小五郎 ID:2 NAME:板垣退助 ID:3 NAME:坂本龍馬 ID:4 NAME:西郷隆盛 ID:5 NAME:高杉晋作
Djangoで使用する場合
setting.pyのDATABASEの項目を以下のように設定して下さい。
DATABASES = {
'default': {
'ENGINE': 'mysql.connector.django',
'NAME': 'DATABASE_NAME',
'USER': 'USER_NAME',
'PASSWORD': 'PASSWORD',
'HOST': 'localhost',
}
}
最後に
ネット上にもpython3.x系の情報が増えてきたとは言え、まだまだpythonといえば2.x系の情報が標準という状態ですね。言語が下位互換を切り捨てるということがどれだけ大きな事態かということを物語っていると思います。
【関連記事】
【Linux】Rubyで書いたCGIをApacheで動かしてみる
[adsense]