Linuxを日常的に使う実験ブログ

Python3でMySQLに接続する環境をLinuxで整える

 2016-03-06

 2024-03-25

 Linux全般

こんにちは。今回のテーマは『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を中心に検証しました。

  1. Python(3.5.1)
  2. Django (1.9.2)
  3. pip (8.0.3)
  4. 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]