プログラミングを行う上では、データベースへの接続は避けては通れません。
避けて通れないと言っても、Pythonなら簡単です。
PyMySQLライブラリを使えば、簡単にMySQL・MariaDBに接続できます。
もちろん、Windows・macOS・LinuxなどのOSは問いません。
この記事では、この便利なPyMySQLに関して解説しています。
本記事の内容
- PyMySQLのシステム要件
- PyMySQLのインストール
- PyMySQLの動作確認
それでは、上記に沿って解説していきます。
PyMySQLのシステム要件
2021年1月時点のPyMySQLの最新バージョンは、0.10.1となります。
PyMySQL 0.10.1は、2020年9月10日にリリースされています。
システム要件としてのポイントは、以下の2つ。
- Python
- MySQL(MariaDB)
以下で説明します。
Python
サポートしているPythonのバージョンは、以下。
- Python 2.7
- Python 3.5
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
一般的に利用されているPythonであれば、基本的には問題ありません。
PyMySQLは、データベース接続というシステムの根本的な部分に関わるライブラリです。
そのため、一部バージョンのみ対応という訳にはいかないのでしょう。
もちろん、その分だけコードは膨らみます。
結果的には、その分だけパフォーマンスは落ちてしまいます。
でも、これは仕方がないでしょうね。
バージョン確認
Pythonのバージョンを確認しておきます。
>python -V Python 3.8.6
サポート対象内であり、Pythonのバージョンは問題ありません。
MySQL(MariaDB)
MySQLとMariaDBともに、バージョンが5.5以降がサポート対象となります。
ここで言うバージョンが意外と混乱を引き起こします。
その混乱に関しての詳細は、次の記事で解説しています。
重要なのは、MySQLサーバーとMariaDBサーバーのバージョンです。
決して、クライアント側のMySQLやMariaDBではありません。
バージョン確認
サーバーに入って確認しておきます。
勘違いしないようにしてください。
$ mysqld --version mysqld Ver 10.5.8-MariaDB-1:10.5.8+maria~bionic for debian-linux-gnu on x86_64 (mariadb.org binary distribution)
MariaDBのバージョン10.5.8です。
5.5以降であり、バージョン的には問題ありません。
PyMySQLのインストール
pipコマンドでインストールします。
pipコマンドを使う際には、以下を事前に実行してください。
python -m pip install --upgrade pip
おまじないレベルで上記コマンドを流してください。
結構高い頻度でpip自体の更新が行われています。
では、PyMySQLをインストールします。
PyMySQLをインストールするコマンドは、以下。
pip install PyMySQL
問題なくインストールが完了しました。
Successfully installed PyMySQL-0.10.1
最新バージョンのPyMySQL 0.10.1がインストールされました。
最後に、このインストールが正しく実施されたかどうかを確認しましょう。
PyMySQLの動作確認
公式ページ上の例を利用します。
https://pypi.org/project/PyMySQL/
https://github.com/PyMySQL/PyMySQL/
載せられているサンプルコードは、データ登録です。
いきなりINSERT文の実行となります。
まあ、ちまちまとSELECT文でデータを取得するよりはいいかもしれません。
INSERT文が実行できれば、実際にテーブルにデータが増えることになります。
動作確認という意味では、ベストなサンプルコードと言えます。
そのサンプルコードを実行する前に、事前準備が必要です。
最初に、データベースを作成しておきます。
「mytest」という適当なデータベース名です。
MariaDB [(none)]> CREATE DATABASE mytest; Query OK, 1 row affected (0.000 sec)
mytestデータベースに接続。
MariaDB [(none)]> USE mytest; Database changed
その上で、以下のクエリでテーブルを作成。
MariaDB [mytest]> CREATE TABLE `users` ( -> `id` int(11) NOT NULL AUTO_INCREMENT, -> `email` varchar(255) COLLATE utf8_bin NOT NULL, -> `password` varchar(255) COLLATE utf8_bin NOT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin -> AUTO_INCREMENT=1 ; Query OK, 0 rows affected (0.020 sec)
もちろん、この状態のテーブルは空です。
MariaDB [mytest]> SELECT * FROM users; Empty set (0.000 sec)
事前準備が完了しました。
では、下記のコードを実行します。
import pymysql.cursors # Connect to the database connection = pymysql.connect(host='サーバーのIP', user='DBユーザー', password='パスワード', db='データベース名(今回はmytest)', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: # Create a new record sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" cursor.execute(sql, ('webmaster@python.org', 'very-secret')) # connection is not autocommit by default. So you must commit to save # your changes. connection.commit() with connection.cursor() as cursor: # Read a single record sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s" cursor.execute(sql, ('webmaster@python.org',)) result = cursor.fetchone() print(result) finally: connection.close()
サンプルコードで変更するのは、以下の4か所。
connection = pymysql.connect(host='サーバーのIP', user='DBユーザー', password='パスワード', db='データベース名(今回はmytest)',
hostに関しては、同じマシン上なら「localhost」でOKです。
プログラムを実行した結果は、以下。
{'id': 1, 'password': 'very-secret'}
成功したような表示です。
では、データベースの方を確認します。
MariaDB [mytest]> select * from users; +----+----------------------+-------------+ | id | email | password | +----+----------------------+-------------+ | 1 | webmaster@python.org | very-secret | +----+----------------------+-------------+ 1 row in set (0.000 sec)
ちゃんとデータが登録されていますね。
ここまで確認できれば、PyMySQLの動作確認は完了です。