Pythonでデータベースを操る!純Python製ライブラリ「PyMySQL」の基本と使い方

投稿者: | 2026-08-14

みなさん、こんにちは。データの保存や管理に、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 pymysql
import 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を指定すると、取得データがタプルではなく「カラム名をキーとする辞書型」になり、コードの可読性が格段に上がりますよ。