Pythonでの接続方法 | MySQLの接続 | Python本格超入門

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

PythonでのMySQL接続方法

Pythonを使ってWebアプリケーションやデータ分析システムを開発する際、データを永続的に保存・管理するデータベース(RDBMS)との連携は不可欠です。

世界中で広く使われているオープンソースの関係データベース管理システムであるMySQL(マイエスキューエル)は、Pythonの外部ライブラリを介して簡単に操作することができます。本記事では、公式が提供するドライバーである mysql-connector-python を用いた、安全で標準的なデータベース接続の手順を網羅的に解説します。

1. 必要なライブラリのインストール

PythonからMySQLにコマンドを送り、結果を受け取るためには「データベースドライバー(コネクター)」と呼ばれる仲介ライブラリが必要です。今回は、MySQL公式チームが開発・メンテナンスしている mysql-connector-python を使用します。

コマンドラインから以下の pip コマンドを実行してインストールしてください。

# 公式のMySQLコネクターをインストール
pip install mysql-connector-python

2. MySQLへの基本的な接続と切断

MySQLへ接続するには、接続先となるサーバーの情報(ホスト名、ユーザー名、パスワード、接続するデータベース名)をプログラムに伝える必要があります。最もシンプルな記述例は以下の通りです。

import mysql.connector

# 1. MySQLデータベースに接続(接続情報の指定)
connection = mysql.connector.connect(
    host="localhost",      # サーバーの場所(自身のPCならlocalhost)
    user="root",           # 接続ユーザー名
    password="password",   # 設定したパスワード
    database="sample_db"   # 操作対象のデータベース名
)

# 2. 接続状態の確認
if connection.is_connected():
    print("MySQLデータベースへの接続に成功しました!")

# 3. 接続を閉じる
# 💡データベースへの接続数には上限があるため、使い終わったら必ず閉じるのが鉄則です
connection.close()

3. 接続情報(引数)の解説

mysql.connector.connect() メソッドに指定する主要な引数の詳細です。

引数名 設定する内容 実務でのポイント・補足
host MySQLサーバーが稼働しているホスト名またはIPアドレス。 自身の開発用PC内であれば "localhost" または "127.0.0.1"、外部のクラウドサーバーであれば "db.example.com" などのアドレスを指定します。
user MySQLにログインするためのユーザー名。 初期設定では特権ユーザーの "root" が使えますが、セキュリティ上の理由から、実務の本番環境では権限を最小限に絞ったアプリ専用のユーザーを別途作成して指定します。
password 指定したユーザーに対応するログインパスワード。 重要:ソースコードにパスワードを直接書き込む(ハードコーディングする)と情報漏洩のリスクが高まります。実務では環境変数(`.env`ファイルなど)から読み込ませる設計が一般的です。
database 接続した後にデフォルトで操作対象とするデータベース名。 MySQLサーバー内に事前に CREATE DATABASE sample_db; コマンド等でデータベースを作成しておく必要があります。

4. 接続時エラーの徹底ハンドリング(try-except-finally)

ネットワークの不調、パスワードの間違い、MySQLサーバー自体が起動していないなど、データベース接続はプログラムの中で最もエラー(例外)が発生しやすい箇所の1つです。

エラーが起きてもプログラムが異常強制終了しないよう、また、「エラーが起きても確実に接続を閉じてメモリを解放する」ために、try-except-finally 構文を徹底するのがプロの実装スタイルです。

import mysql.connector
from mysql.connector import Error

# 接続変数を事前に初期化
connection = None

try:
    # 接続を試みる
    connection = mysql.connector.connect(
        host="localhost",
        user="root",
        password="password",
        database="sample_db"
    )

    if connection.is_connected():
        print("MySQLに安全に接続されました。")
        
        # 💡ここにカーソル(Cursor)を使ったデータ操作処理を記述していきます

except Error as e:
    # 接続に失敗した際のエラー内容をキャッチして表示
    print(f"データベース接続エラーが発生しました: {e}")

finally:
    # エラーの成否にかかわらず、最終的に必ず実行されるブロック
    if connection is not None and connection.is_connected():
        connection.close()
        print("MySQLとの接続を安全に切断しました。")

コードの解説

  1. except Error as e:MySQL固有のエラー(認証失敗、タイムアウトなど)を正確に検知し、原因(エラーコードやメッセージ)を変数 e として出力します。
  2. finally: ブロック:try の中でエラーが起きた場合でも、起きなかった場合でも、最後に必ず通過する処理領域です。
  3. if connection is not None and connection.is_connected()::そもそも接続にすら失敗して connection が作られていない状態のまま .close() を呼ぶと二次エラーになってしまうため、しっかりと「接続オブジェクトが存在し、かつ現在接続中であること」を確認してから安全にクローズしています。

まとめ

  • mysql-connector-python が公式の架け橋:PythonからMySQLを直感的に操作するための標準的かつ強力なドライバーであり、pip ですぐに導入できます。
  • 接続情報のコード直書きを避けるhostpassword などの機密情報は、将来的に環境変数などを活用して安全に管理する意識を持ちましょう。
  • finally での確実なクローズを義務付ける:データベースサーバーの接続リソース(コネクション)は有限です。接続エラーやクエリの失敗が起きても、最後には必ず connection.close() が実行される堅牢な例外処理コードを書きましょう。

データベースへの安全な接続路が確保できたら、次は「カーソル(Cursor)」と呼ばれるオブジェクトを使って、SQL文(SELECT、INSERT、UPDATE、DELETEなど)をPythonから発行し、データを自在に操る応用操作へとステップを進めていきましょう。