PythonからMySQLに接続してデータベースを操作するには
はじめに
Pythonは汎用性が高く、データベースとの連携も得意とされています。MySQLは広く利用されるデータベース管理システムであり、PythonからMySQLを操作することでウェブアプリケーションの開発やデータ解析、ユーザー管理など幅広い用途に活用できます。
本記事ではPythonからMySQLデータベースに接続して基本的な操作を行う手順を、サンプルコードを交えて解説します。
MySQLとは?
MySQLはオープンソースかつ高性能なリレーショナルデータベース管理システム(RDBMS)であり、データの格納や取得、更新、削除などの操作を行うことができます。多くのWebアプリケーションやサービスで利用され、信頼性が高いことから開発者に広く支持されています。
PythonからMySQLを操作するのはどんな場面か?
PythonからMySQLを操作する場面は多岐にわたります。以下はその一例です。
- ウェブアプリケーション開発
- ユーザーや商品の情報やセッションデータをデータベースに保存し、取得する。
- データ解析
- 大量のデータをMySQLに格納し、Pythonを使用してデータの分析や可視化を行う。
- 大量のデータをMySQLに格納し、Pythonを使用してデータの分析や可視化を行う。
PythonからMySQLを操作することで柔軟かつ効率的なデータベース管理が可能となるため、さまざまな場面で活用されています。
必要なライブラリ(mysql-connector-python)とそのインストール方法
PythonからMySQLに接続するためには、mysql-connector-pythonというライブラリを使用します。以下にそのインストール方法を示します。
pip install mysql-connector-python
これでPythonスクリプトからMySQLに接続する際に必要なライブラリが導入されます。
PythonでMySQLのデータベースを作成する
まずはMySQLにデータベースを作成してみましょう。以下がその手順です。
MySQL自体のインストールや立ち上げ、ユーザー作成とそのパスワード設定は別途行なってください。
接続先のホストも別途把握してください。
この記事ではlocalhostにてMySQLが動作している前提で進めていきます。
import mysql.connector
# MySQLに接続
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password"
)
# カーソルを取得
cursor = conn.cursor()
# データベース作成
cursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
# 接続を閉じる
cursor.close()
conn.close()
これで、"mydatabase"という名前のデータベースが作成されます。
"your_username"と"your_password"はご自身のMySQLのユーザー名とパスワードに置き換えてください。また、"mydatabase"は作成したいデータベースの名前に変更してください。
カーソル(cursor)とは何か?
前項で出てきたカーソル(cursor)について少し解説しておきます。
カーソルは、データベースとの対話やクエリの実行を行うための仮想ポインタのようなものです。
PythonからMySQLデータベースに接続した際に、このカーソルを使用してデータベース上のクエリを実行します。
以下にcursorの役割と主な操作について説明します。
カーソルの取得:
cursor = conn.cursor()
データベースとの接続(conn)からカーソルを取得します。このカーソルを通じてクエリを実行し、結果を取得できます。
クエリの実行:
cursor.execute(sql_query)
executeメソッドを使用して、SQLクエリを実行します。これにより、データベース上で指定された操作が実行されます。
データの取得:
result = cursor.fetchall()
fetchallメソッドを使用して、実行されたクエリの結果を取得します。取得したデータはPythonのデータ構造に変換され、プログラムで利用できます。
データの変更の確定:
conn.commit()
データベース上での変更(挿入、更新、削除など)を確定させるために、commitメソッドを使用します。これにより、変更が永続的にデータベースに反映されます。
カーソルのクローズ:
cursor.close()
カーソルが不要になったら、closeメソッドを使用して閉じます。これにより、データベースとの接続が解除されます。
cursorはデータベースとのやりとりを行うためのインターフェースであり、クエリの実行や結果の取得、データベースへの変更の確定などを行います。
データベースに対する操作は、このカーソルを介して行われ、データベースへの接続が維持されたまま、複数のクエリや操作を逐次的に実行できます。
作成したMySQLデータベースに接続する
PythonからMySQLデータベースに接続する手順は以下の通りです。この接続はデータベースへの操作を行う前に行う必要があります。
import mysql.connector
# MySQLに接続
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="mydatabase"
)
# カーソルを取得
cursor = conn.cursor()
# ここでデータベースへの操作を行う
# 接続を閉じる
cursor.close()
conn.close()
これ以降はさまざまなケースでPythonからMySQLへクエリを渡して実行するサンプルです。
それぞれ上記のサンプルコード内にある「#ここでデータベースへの操作を行う」という箇所に当てはめて実行してみてください。
MySQLのデータベースにテーブルを作成する
作成したデータベースにテーブルを作成するには以下のコードを実行します。
# テーブル作成のクエリ
create_table_query = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
)
"""
# テーブル作成
cursor.execute(create_table_query)
これで、"users"という名前のテーブルが作成されました。テーブルはid、username、emailの3つのカラムで構成されています。
テーブルにデータを挿入する
テーブルにデータを挿入してみましょう。
データを1件だけ挿入する場合
# データ挿入のクエリ
insert_data_query = """
INSERT INTO users (username, email) VALUES (%s, %s)
"""
# データ挿入
user_data = ("Tanaka", "tanaka@example.com")
cursor.execute(insert_data_query, user_data)
# 変更を確定
conn.commit()
このサンプルコードでは、"users"テーブルに新しいユーザーのデータを1件挿入しています。%sはプレースホルダーと呼ばれるもので、後で与えられるデータで置き換えられます。
複数件のデータをまとめて挿入する場合
複数件のデータをまとめて、リストで渡すこともできます。
# 複数データ挿入のクエリ
insert_multiple_data_query = """
INSERT INTO users (username, email) VALUES (%s, %s), (%s, %s), (%s, %s)
"""
# 複数データ挿入
multiple_user_data = [
("Tanaka", "tanaka@example.com"),
("Yamada", "yamada@example.com"),
("Hashimoto", "hashimoto@example.com")
]
cursor.executemany(insert_multiple_data_query, multiple_user_data)
# 変更を確定
conn.commit()
このサンプルコードでは、一度に複数のユーザーのデータを"users"テーブルに挿入しています。
実行時のメソッドがexecutemany()になっていることにご注意ください。
データを取得する
挿入したデータを取得してみましょう。
データを一件だけ取得する場合
# データ取得のクエリ
select_one_data_query = "SELECT * FROM users WHERE username = %s"
# データ取得
cursor.execute(select_one_data_query, ("Tanaka"))
# 結果を取得
result = cursor.fetchone()
# 結果を表示
print(result)
このサンプルコードでは、"users"テーブルからユーザー名が"Tanaka"のデータを一件取得しています。
すべてのデータを取得して繰り返し処理をする場合
# データ取得のクエリ
select_all_data_query = "SELECT * FROM users"
# データ取得
cursor.execute(select_all_data_query)
# 結果を取得
result = cursor.fetchall()
# 結果を表示
for row in result:
print(row)
このサンプルコードでは、"users"テーブルのすべてのデータを取得し、for文を使用して繰り返し処理を行っています。
データを更新する
# データ更新のクエリ
update_data_query = "UPDATE users SET email = %s WHERE username = %s"
# データ更新
new_email = "Tanaka.new@example.com"
cursor.execute(update_data_query, (new_email, "Tanaka"))
# 変更を確定
conn.commit()
このサンプルコードでは、"users"テーブルのユーザー名が"Tanaka"のデータのメールアドレスを更新しています。
データを削除する
# データ削除のクエリ
delete_data_query = "DELETE FROM users WHERE username = %s"
# データ削除
cursor.execute(delete_data_query, ("Tanaka"))
# 変更を確定
conn.commit()
このサンプルコードでは、"users"テーブルからユーザー名が"Tanaka"のデータを削除しています。
まとめ
本記事では、PythonでMySQLデータベースに接続して基本的な操作を行う方法を解説しました。
データベースの作成、テーブルの作成、データの挿入・取得・更新・削除はWEBアプリケーションを開発する過程で頻繁に実施する処理です。
ここで解説した手順を基に、実際のプロジェクトやアプリケーションでデータベースを活用してみましょう。