【mysqlclient】PythonでMySQL(MariaDB)に接続する

【mysqlclient】PythonでMySQL(MariaDB)に接続する プログラミング

「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.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年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の動作確認を説明しました。

タイトルとURLをコピーしました