PythonからMySQLにアクセスする

参考文献によると、PythonからMySQLにアクセスするにはPyMySQLというライブラリを使うそうだ。

さっそくインストールしてみる。

ここでは、Pythonの仮想環境にインストールした。

$ pip3 install PyMySQL

あっという間に終わった。

MySQLのインストール

Ubuntu 16.04にMySQLをパッケージインストールする。

$ sudo apt-get -y install mysql-server
※途中でMySQLのrootユーザーのパスワードを聞いてくるので入力する。

MySQLクライアントソフトもインストールする。

$ sudo apt-get -y install mysql-client

テーブルに日本語データを入力できるようにするために、/etc/mysql/my.cnfに以下の内容を追加する。 (参考サイト » Quiita UbuntuでMySQL)
英数字のみしか使わないのであれば、特に必要はない。

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

MySQLを再起動する。

$ sudo /etc/init.d/mysql restart

実験用データベース & テーブルの準備

rootユーザーでMySQLにログインし、実験用データベースを作成する。

$ mysql -u root -p
Enter password: ※パスワードを入力
〜 ログインメッセージ(省略) 〜
mysql> CREATE DATABASE sample
    -> CHARACTER SET utf8
    -> COLLATE utf8_general_ci;

※CHARACTER SETとCOLLATEの値は、SHOW CHARACTER SET および、SHOW COLLATIONを実行して、それっぽいものを指定した。

実験用データベースにアクセスするユーザーを作成する。

mysql> GRANT ALL ON sample.* TO 'solima'@'localhost' IDENTIFIED BY 'password';

実験用テーブルを作成する。

mysql> use sample;
mysql> CREATE TABLE pclang (id BIGINT(7) NOT NULL AUTO_INCREMENT, name VARCHAR(30), division VARCHAR(20), PRIMARY KEY(id));

何かデータを作成する。

mysql> INSERT INTO pclang(name, division) VALUES('Python', 'インタプリタ');
mysql> INSERT INTO pclang(name, division) VALUES('Java', 'コンパイラ');

準備完了。
いよいよ、PythonでMySQLにアクセスする時が来た。

Python/MySQL接続サンプルプログラム

PyMySQLの基本的な流れは以下の通り。
1. データベースに接続する。
2. カーソルの取得。
3. カーソルに対してSQL文を発行する。
4. 実行結果の取得。
5. カーソルを閉じる。
6. データベースを切断する。

これを踏まえて、以下のようなサンプルプログラムを作った。

(サンプルプログラム) mysql_access.py

import pymysql

conn = pymysql.connect(host='localhost', user='solima',
                       passwd='password', db='sample')

cur = conn.cursor()
cur.execute("SELECT name, division FROM pclang")

for row in cur.fetchall():
    print("{}:{}".format(row[0], row[1]))
    
cur.close()
conn.close()

(実行結果)

$  python mysql_access.py
Python:インタプリタ
Java:コンパイラ

MySQLへのファーストコンタクトは成功したようだ。

参考サイト

PyMySQL Evaluation

参考文献

PythonによるWebスクレイピング

Pythonプログラミング物語 © 2016 Frontier Theme