PythonでMySQLを操作する(PyMySQL)

PythonでMySQLを操作する(PyMySQL)
スポンサーリンク
スポンサーリンク

ここではPythonでMySQLを操作する方法を解説します。
MySQLにデータを保存することで大規模なデータを簡単に扱うことができるようになります。

MySQLはデータベース(DB)の一種で、リレーショナルデータベース(RDB)に分類されます。
DBの分類は他にNoSQL(ノーエスキューエル)があり、MongoDBやなどがNoSQLに分類されます。

RDBはトランザクションを重要視しておりデータの整合性を保つことができます。
一方でNoSQLはデータの整合性を弱める代わりに、スケーラビリティや読み書き性能を高めたデータベースです。

スポンサーリンク

使用ライブラリ

PythonからMySQLに接続するためのライブラリはいくつかありますが、ここでは PyMySQL を使用します。

 使用ライブラリ:PyMySQL(公式ドキュメント
 インストール :必要

MySQL用ライブラリを比較すると以下のようになります。どのライブラリを使用してもコードの内容はほぼ同じです。

ライブラリPython3対応作者ライセンス
PyMySQLPete HuntMIT
mysql-connector-pythonOracle(MySQL公式)GNU GPLv2
mysqlclientInada NaokiGNU GPL
MySQLdb×Andy DustmanGPL
MySQL-Python×Andy DustmanGPL
MySQLライブラリ比較

PythonではPEP249 (DB-API 2.0)で、DB接続やSQLの実行、結果の取り出し方法などのAPIの仕様を定めています。多くのモジュールがこれに沿って実装されているため、どのライブラリを使用しても基本は同じメソッドで実行する事ができるようになっています。

・関連記事:PythonでMySQLを操作する(mysql-connector-python)

ライブラリのインストール

pip コマンドで PyMySQL ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)

Successfully installed PyMySQL-*.*.* と表示されればインストールは成功です。

MySQLを準備する

MySQLの事前準備について解説します。
すでにMySQLを導入していて、作成済のデータベースを利用する場合は飛ばしてください。

MySQLのインストール(Windows)

MySQLがインストールされていない場合はPCにインストールします。
インストール方法はこちらの記事を参照してください。
・参考記事:【Windows11対応】MySQLのインストール手順

データベースを作成する

インストールが完了したら、コマンドプロンプトを開きMySQLに接続して、データベースを作成します。接続するには以下のように入力します。

Enter password : と表示されるので、インストール時に設定したパスワードを入力します。

下図のようにメッセージが表示され、MySQLを操作できる状態になります。

コマンドプロンプト

まず、データベースを作成します。
CREATE DATABASE データベース名; と入力し正常に処理されると、Query OK, 1 row affected と表示されます。

メッセージが表示されず以下のように、-> が表示される場合は、文末の ;(セミコロン)が抜けていないか確認してください。抜けていた場合は、;(セミコロン) を入力すれば正常に処理されます。

入力をやり直したい場合はCTRL+Cでクエリをキャンセルしてやり直す事ができます。

テーブルを作成する

次にテーブルを作成します。

先程作成したデータベースに接続するため、USE データベース名;と入力します。
Database changedと表示されれば正常に接続されています。

ERROR 1049 (42000): Unknown database 'データベース名'と表示された場合は、指定したデータベース名が存在していないため、作成済のデータベース名を指定してください。

以下のクエリを入力してテーブルを作成します。

Query OK とメッセージが表示されれば正常にテーブルが作成されています。

作成済のテーブルを確認する場合は、show TABLES; で一覧を表示する事ができます。

レコードを挿入する(INSERT)

以下のプログラムは公式サイトを参考にしています。(公式サンプル

レコードを挿入するにはcursorオブジェクトの execute メソッドでINSERTクエリを実行します。
クエリの文末にデリミタ(;)は不要です。

cursorオブジェクト.execute(INSERTクエリ) 

結果を確認するために、MySQLで以下のようにselectクエリを実行してみます。

上記のようにテーブルが表示されれば、正常に登録されています。

with文を使わずに以下のように記述することも可能です。
ただしWith文を使用しない場合は、自動的に接続を閉じてくれないため close() メソッドで明示的に閉じる必要があります。


MySQLでテーブルの全レコードを削除するには、以下のようにTRUNCATEクエリを実行します。

複数レコードを一括で挿入する(INSERT)

レコードを一括で挿入するには、cursorオブジェクトの executemany() メソッドでINSERTクエリを実行します。
第二引数に挿入するデータのリストもしくはタプルを指定します。

cursorオブジェクト.executemany(INSERTクエリ, 挿入データのリストまたはタプル)

複数レコードを一括で挿入するサンプルプログラムです。

結果を確認するために、MySQLで以下のようにselectクエリを実行してみます。

上記のようにテーブルが表示されれば、正常に登録されています。

データを取得する(SELECT)

SQL実行結果からデータを取得するには fetchメソッドを使用します。
fetchメソッドには、fetchone():1件ずつ取得, fetchall():全件取得, fetchmany():指定行数取得があります。

データを1件ずつ取得する

データを1件ずつ取得するには、cursorオブジェクトのexecuteメソッドでSQLのSELECTクエリを実行します。

cursorオブジェクト.execute(SELECTクエリ) 
cursorオブジェクト.fetchone()

以下の例は、WHERE句で条件を指定して1件文のレコードを抽出して、fetchone()でデータを取得しています。

取得結果は、キーが列名、値がデータの辞書型になります。
{‘id’: 1, ‘password’: ‘very-secret1’}

with文を使わずに以下のように記述することもできます。

全データを取得する

複数レコードを取得するSELECTクエリを実行し、fetchall()で全データを取得します。

 cursorオブジェクト.execute(SELECTクエリ) 
 cursorオブジェクト.fetchall()

出力結果は以下のようになります。

[{‘id’: 1, ‘password’: ‘very-secret1’}, {‘id’: 2, ‘password’: ‘very-secret2’}, {‘id’: 3, ‘password’: ‘very-secret3’}, {‘id’: 4, ‘password’: ‘very-secret4’}, {‘id’: 5, ‘password’: ‘very-secret5’}]

with文を使用しない方法は以下になります。

データの更新(UPDATE)

登録済みのデータを更新するには、cursorオブジェクトの execute メソッドでUPDATEクエリを実行します。

cursorオブジェクト.execute(UPDATEクエリ)

次の例では、usersテーブル id=1 の email「webmaster1@python.org」を「master@python-work.com」に更新します。

MySQLコンソールで email が変更されていることが確認できます。

データの削除(DELETE)

データを削除するには、cursorオブジェクトの execute メソッドでDELETEクエリを実行します。
cursor.rowcount で削除した行数を取得できます。

cursorオブジェクト.execute(DELETEクエリ)
 1 rows deleted

MySQLのコンソールでデータが削除されていることを確認できます。


PythonでMySQLを操作する方法を解説しました。

・関連記事:PythonでMySQLを操作する(mysql-connector-python)
・関連記事:PythonでMongoDBを操作する(PyMongo)