
みなさん、こんにちは。データの保存や管理に、MySQLやMariaDBといったリレーショナルデータベース(RDB)を使ってみたいと思ったことはありませんか?Pythonにはデータベースと連携するためのライブラリがいくつか存在しますが、今回はその中でもインストールが簡単で扱いやすい「PyMySQL」をご紹介します。
PyMySQLとは?(概要)
PyMySQLは、Pythonだけで記述された(Pure Pythonの)MySQLクライアントライブラリです。外部のC言語ライブラリに依存していないため、WindowsやmacOS、Linuxなど、どのような環境からでもコンパイルエラーを気にせずにスムーズに導入できるのが大きな特徴です。Python標準のデータベースAPI仕様「PEP 249」に準拠しているため、直感的で分かりやすいコードでデータベース操作が行えます。
C言語のビルド環境が不要なので、ライブラリのインストールで挫折することがないのが本当に嬉しいですね。
PyMySQLのメリット
- 環境構築が驚くほど簡単:CコンパイラやMySQL公式の開発用ヘッダーファイルを事前に用意する必要がありません。
pip install pymysqlというコマンド一つですぐに使い始められます。 - 高い互換性:MySQLだけでなく、現在多くのプロジェクトで採用されているMariaDBにも完全対応しています。
- セキュアな設計:SQLインジェクション脆弱性を防ぐためのプレースホルダ機能がしっかりと組み込まれており、安全なデータ操作が可能です。
基本的なサンプルコード
それでは、実際にデータベースに接続するコードを見てみましょう。安全にデータをやり取りするために、プレースホルダ(%s)を活用するのが基本です。
pip install pymysqlimport pymysql
# データベース接続の設定
# (※接続先環境に合わせて適宜書き換えてください)
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor # 取得結果を辞書型にする設定
)
try:
with connection.cursor() as cursor:
# 1. テーブルの作成
create_table_sql = """
CREATE TABLE IF NOT EXISTS students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
score INT NOT NULL
)
"""
cursor.execute(create_table_sql)
# 2. データの挿入(プレースホルダ %s を使用)
insert_sql = "INSERT INTO students (name, score) VALUES (%s, %s)"
cursor.execute(insert_sql, ('Alice', 95))
cursor.execute(insert_sql, ('Bob', 82))
# データの変更を確定する(コミット)
connection.commit()
print("データの挿入に成功しました。")
# 3. データの取得
select_sql = "SELECT id, name, score FROM students WHERE score >= %s"
cursor.execute(select_sql, (80,))
# すべての検索結果を辞書形式で取得
results = cursor.fetchall()
for row in results:
print(f"ID: {row['id']}, 名前: {row['name']}, 点数: {row['score']}")
finally:
# エラーが発生しても確実に接続を閉じます
connection.close()みーちゃんのワンポイント
PyMySQLを使用する際は、接続を閉じる処理を確実に行うためにtry…finallyブロックを活用しましょう。また、接続時にcursorclass=pymysql.cursors.DictCursorを指定すると、取得データがタプルではなく「カラム名をキーとする辞書型」になり、コードの可読性が格段に上がりますよ。

