【MySQL入門】PythonからMySQLを使ってみよう!mysqlclient利用編

皆さんMySQL使っていますか?MySQLの学習に没頭していると忘れがちですが、MySQLはあくまでもデータベース管理システム。実際にプログラムのなかで使ってみることで理解が深まる部分もあります。

そこで、今回は最近人気の高まっているPythonからMySQLを扱う方法をご紹介します。そこまで手間がかからず、簡単にPythonから大規模なデータを扱うことができるようになるので、おすすめですよ。さっそくいってみましょう!

MySQLに接続する下準備:モジュールのインストール

まずはじめに、今回はPythonからMySQLに接続するためにmysqlclientパッケージを利用します。こちらはPython2系列でよく使われたMySQLdb1の3系列向けフォークになり、現在でも活発に開発が進められています。

様々な事情でmysqlclientが使えない場合は公式提供のmysql-connector-pythonというパッケージもあります。そちらを使った方法については別記事で紹介していますので、下記を参照してください。

ではここから実際に必要なモジュール・パッケージをインストールしていきましょう。なお、前提としてPythonとMySQLのインストール及び基本的な初期設定は完了しているものとして話を進めていきます。

まずは前提条件となるライブラリをインストールしていきます。

Debian / Ubuntuの場合

sudo apt-get install python-dev default-libmysqlclient-dev

Red Hat / CentOSの場合

sudo yum install python-devel mysql-devel

macOSの場合

brew install mysql-connector-c

Python3の場合は更に追加で以下のライブラリをインストールします。

debian / Ubuntuの場合

sudo apt-get install python3-dev

Red Hat / CentOSの場合

sudo yum install python3-devel

macOSではmysql-connector-cにインストール時のバグが有るようで、mysql_configが下記のように書き換えられてしまうことがあります。

# on macOS, on or about line 112:
# Create options
libs="-L$pkglibdir"
libs="$libs -l "

この様になっていた場合、次のように書き換えることで問題を解決できます。

# Create options
libs="-L$pkglibdir"
libs="$libs -lmysqlclient -lssl -lcrypto"

ここまで事前準備が完了したら、あとはpipから以下のコマンドを入力すればインストールが完了です。

pip install mysqlclient

なお、Windowsではpipからのインストールがうまくいかないことがあるようで、そういった場合は自分でWheelをインストールするしかありません。

下記のページから自分の環境にあったものを選び、インストールしたいフォルダまで移動した後に、次のコマンドでインストールしてください。

Unofficial Windows Binaries for Python Extension Packages

2018年12月の段階ではmysqlclient‑1.3.13‑cp37‑cp37m‑win_amd64.whlが64ビット用の最新版でした。

pip install mysqlclient‑1.3.13‑cp37‑cp37m‑win_amd64.whl

mysqlclientを使ってPythonから接続する

それではmysqlclientを使ってPythonからMySQLを操作していきましょう。その準備として、今回操作するデータベースを先に用意しておきます。MySQL上で次のクエリを実行してデータベースを作成しておいてください。

クエリ

CREATE DATABASE python_db;

ではあらためて、mysqlclientを使ってPythonからMySQLに接続してみます。Pythonの実行環境から次のコードを実行してみましょう。

# MySQLdbのインポート
import MySQLdb

# データベースへの接続とカーソルの生成
connection = MySQLdb.connect(
    host='localhost',
    user='root',
    passwd='ルートのパスワード',
    db='python_db')
cursor = connection.cursor()

# ここに実行したいコードを入力します

# 保存を実行
connection.commit()

# 接続を閉じる
connection.close()

実行して何もエラーが出なければ準備完了です。注意点として、commitメソッドを実行しないと、コード内で行った変更は記録されません。特に慣れないうちはうっかりcommitを忘れがちなので、注意しましょう。

Pythonからの基本操作と実践

この章ではPythonからの基本的な操作を紹介していきます。注意点が1点あります。この章ではサンプルの冗長化を防ぐため、実行部分のコードを抜き出して記載していきます。

実行する場合は前章のサンプルにあった、「# ここに実行したいコードを入力します」にコードを入力してください。

SQLの実行

まずはSQL文の実行から。SQL文の実行はexecuteメソッドを使います。

cursor.execute("SELECT * FROM sample")

注意点として、文末にデリミタ(;)は不要です。

データの取得

つづいて、データの取得について。SQL文を実行したcursorオブジェクトに対して、fetch系のメソッドを適用することで内容を取り出すことができます。

例1

cursor.execute("SELECT * FROM sample")
# fetchall()で全件取り出し
rows = cursor.fetchall()

例2

cursor.execute("SELECT * FROM sample")
# fetchone()で1件ずつ取り出し
rows = cursor.fetchone()

取り出したものを1件ずつ表示させるにはfetchall()を使うか、cursorをイテレータとして使います。

fetchall()を使う方法

cursor.execute("SELECT * FROM sample")
rows = cursor.fetchall()
for row in rows:
  print (row)

cursorのイテレータ的な利用法

cursor.execute("SELECT * FROM sample")

for row in cursor:
  print (row)

コマンドを一通り使ってみる

最後に今まで学んできたことをまとめとして、データベースの接続からテーブルの作成、データの追加、一覧の表示、テーブルの保存、接続の解除までを1つのコードにまとめてみます。

# MySQLdbのインポート
import MySQLdb

# データベースへの接続とカーソルの生成
connection = MySQLdb.connect(
    host='localhost',
    user='root',
    passwd='ルートのパスワード',
    db='python_db',
# テーブル内部で日本語を扱うために追加
    charset='utf8'
)
cursor = connection.cursor()

# テーブルの初期化
cursor.execute("DROP TABLE IF EXISTS name_age_list")

# テーブルの作成
cursor.execute("""CREATE TABLE name_age_list(
    id INT(11) AUTO_INCREMENT NOT NULL, 
    name VARCHAR(30) NOT NULL COLLATE utf8mb4_unicode_ci, 
    age INT(3) NOT NULL,
    PRIMARY KEY (id)
    )""")

# データの追加
cursor.execute("""INSERT INTO name_age_list (name, age)
    VALUES ('タロー', '25'),
    ('ジロー', '23'),
    ('サブロー', '21')
    """)

# 一覧の表示
cursor.execute("SELECT * FROM name_age_list")

for row in cursor:
    print(row)


# 保存を実行
connection.commit()

# 接続を閉じる
connection.close()

実行結果

(1, 'タロー', 25)
(2, 'ジロー', 23)
(3, 'サブロー', 21)

無事、テーブルの中身は表示されましたか?

まとめ

いかがでしたか?今回はPythonからMySQLを扱う方法をご紹介してきました。MySQLを扱うプログラミング言語というとPHPが筆頭に上がりますが、MySQLはあくまでもデータベース管理システムなので、言語に束縛されることはありません。

必要なときにMySQLを使えるようになっておくと色々と便利ですので、ぜひPythonでもMySQLを使えるようになりましょう。この記事が皆様のMySQL学習の一助となれば幸いです。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

平山 晃

平山 晃

フリーのエンジニア・ライター。
プログラミング、ライティング、マーケティングなど、あらゆる手段を駆使して、
ハッピーなフルリモートワーカーを目指し中。

最近興味がある分野は深層強化学習。
積みゲー、積ん読がどんどん増加しているのがここ数年の悩み。
実は侍エンジニア塾の卒業生だったりします。