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

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

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

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ 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学習の一助となれば幸いです。

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次