「PythonからMySQL・MariaDBに接続したい」
「データベース処理の速度を重視したシステムを考えている」
このような場合には、mysqlclientがオススメです。
この記事では、mysqlclientについて解説しています。
本記事の内容
- mysqlclientとは?
- mysqlclientのシステム要件
- mysqlclientのインストール
- mysqlclientの動作確認
それでは、上記に沿って解説していきます。
mysqlclientとは?
mysqlclientは、MySQL・MariaDBに接続するためのPythonライブラリです。
mysqlclientを用いれば、PythonからMySQL・MariaDBを操作できます。
また、mysqlclientはMySQLdb1をフォークしています。
つまり、mysqlclientはMySQLdb1の後継ということです。
MySQLdb1は、次のコマンドでインストールされていました。
pip install MySQL-python
MySQLdb1自体は、もう何年も更新されていません。
だから、MySQLdb1を引き継ぐ形でmysqlclientが開発されたというわけです。
具体的には、Python 3対応や不具合修正などが実施されています。
こうやって引き継がれてきたmysqlclientの最大の特徴は、libmysqlclientを用いるところです。
libmysqlclientは、MySQLの共有ライブラリになります。
libmysqlclientはC言語で開発されているため、パフォーマンスが優れています。
以上、mysqlclientについて説明しました。
次は、mysqlclientのシステム要件を説明します。
mysqlclientのシステム要件
現時点(2022年7月)でのmysqlclientの最新バージョンは、2.1.1となります。
この最新バージョンは、2022年6月22日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
次は、Python公式開発サイクルです。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python公式開発サイクルによると、Python 3.6はもうサポート期限が切れています。
したがって、この記事ではPython 3.7以降を推奨しておきます。
セキュリティを考えると、このようなサポート状況は無視できません。
何か問題があったときに、言い訳できませんからね。
あと、libmysqlclientを利用する以上はビルド処理が必要になります。
ビルド作業は、OS毎に必要なモノが異なります。
実は、それもあってWindowsでのインストールは難易度が高くなります。
今回は、Ubuntu・Debianを対象にした場合の要件を説明します。
公式では、以下を事前にインストールするように記載されています。
$ sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
それぞれビルドする際に必要となるモノばかりです。
以上、mysqlclientのシステム要件を説明しました。
次は、mysqlclientのインストールを説明します。
mysqlclientのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.1.2 setuptools 63.1.0 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、mysqlclientのインストールです。
mysqlclientのインストールは、以下のコマンドとなります。
pip install mysqlclient
mysqlclientのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ----------- ------- mysqlclient 2.1.1 pip 22.1.2 setuptools 63.1.0 wheel 0.36.2
依存するパッケージは、存在していません。
したがって、依存関係でトラブルになることはないでしょう。
ただし、ビルドが成功する環境を用意する必要はあります。
以上、mysqlclientのインストールを説明しました。
次は、mysqlclientの動作確認を説明します。
mysqlclientの動作確認
mysqlclientの動作確認を行います。
テーブルにあるデータを照会する動作を確認してみましょう。
その際には、次のサンプルデータベースを利用します。
その中から、cityテーブルを利用します。
テーブル定義は、以下。
mysql> DESC city; +-------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | | | | | CountryCode | char(3) | NO | MUL | | | | District | char(20) | NO | | | | | Population | int(11) | NO | | 0 | | +-------------+----------+------+-----+---------+----------------+
cityには、レコード数が登録されています。
mysql> SELECT COUNT(*) FROM city; +----------+ | COUNT(*) | +----------+ | 4079 | +----------+
次の条件により、5レコードを抽出可能です。
mysql> select * from city where CountryCode = 'JPN' AND District = 'Fukuoka'; +------+------------+-------------+----------+------------+ | ID | Name | CountryCode | District | Population | +------+------------+-------------+----------+------------+ | 1539 | Fukuoka | JPN | Fukuoka | 1308379 | | 1542 | Kitakyushu | JPN | Fukuoka | 1016264 | | 1623 | Kurume | JPN | Fukuoka | 235611 | | 1681 | Omuta | JPN | Fukuoka | 142889 | | 1753 | Kasuga | JPN | Fukuoka | 101344 | +------+------------+-------------+----------+------------+
mysqlclientを使って、同じように5レコード抽出してみましょう。
その際に用いるのは、次のコードです。
import MySQLdb conn = MySQLdb.connect( host="localhost", port=3306, user="tester", passwd="testpass", db="world") cur = conn.cursor() cur.execute("select * from city where CountryCode = 'JPN' AND District = 'Fukuoka';") result = cur.fetchall() for target in result: print(target) cur.close() conn.close()
データベースの接続情報は、各自の環境に合わせて変更してください。
上記コードを実行した結果は、以下。
(1539, 'Fukuoka', 'JPN', 'Fukuoka', 1308379) (1542, 'Kitakyushu', 'JPN', 'Fukuoka', 1016264) (1623, 'Kurume', 'JPN', 'Fukuoka', 235611) (1681, 'Omuta', 'JPN', 'Fukuoka', 142889) (1753, 'Kasuga', 'JPN', 'Fukuoka', 101344)
問題ありませんね。
以上、mysqlclientの動作確認を説明しました。