mei_13のPython講座 ロゴ

【解説】PythonでMySQLを操る:基礎から実践まで、データを自在に扱うためのガイド




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

PythonでMySQLを操る:基礎から実践まで、データを自在に扱うためのガイド


Hirokiのアイコン
【Hiroki】 Yukiさん、こんにちは! 最近プログラミングの学習を進めている中で、もっとたくさんのデータを効率よく管理したいと思うようになりました。 そこで「データベース」に興味を持ったのですが、PythonからMySQLというデータベースを操作するにはどうすればいいのでしょうか? 初心者でも分かりやすく教えていただけると嬉しいです。


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。 データの管理に興味を持つなんて、一歩進んだプログラミングの世界に足を踏み入れようとしているのですね。素晴らしいと思います...。 大量のデータを扱う際、テキストファイルだけでは限界がありますから、データベースを使えるようになると作れるアプリの幅がぐっと広がりますよ。

今回は、Pythonを使って世界中で広く使われているMySQLというデータベースを操作する方法についてお話ししますね。 少し難しい部分もあるかもしれませんが、一つずつゆっくり進めていけば大丈夫だと思います...。

MySQLとは何かを知りましょう


Hirokiのアイコン
【Hiroki】 ありがとうございます! そもそも、MySQLというのはどのようなデータベースなんですか?


Yukiのアイコン
【Yuki】 そうですね...。MySQLは「リレーショナルデータベース管理システム(RDBMS)」と呼ばれるものの一つです。 データを行と列がある「テーブル」という表形式で管理するのが特徴で、非常に高い信頼性と速度を持っています。 オープンソースなので、個人の開発から大きな企業のシステムまで、あらゆるところで使われているんですよ。

PythonからこのMySQLを操作するには、プログラムとデータベースを橋渡ししてくれる「コネクタ」というライブラリが必要になります。 いくつか種類はありますが、今回は一番標準的で使いやすい「mysql-connector-python」というライブラリを使っていきましょう。

環境の準備をしましょう


Hirokiのアイコン
【Hiroki】 なるほど、橋渡し役が必要なんですね。 まずは、そのライブラリを使えるようにする準備から始めればいいでしょうか?


Yukiのアイコン
【Yuki】 はい、その通りです。 まずは、お手元のターミナルやコマンドプロンプトで、以下のコマンドを入力してインストールしてみてください。 もしMySQLサーバー自体がまだインストールされていない場合は、別途インストールしておく必要がありますが、今回はPython側の操作に集中しましょうね。

pip install mysql-connector-python


Hirokiのアイコン
【Hiroki】 インストールできました! これでPythonからMySQLを呼び出す準備が整ったということですね。


Yukiのアイコン
【Yuki】 ええ。これでPythonプログラムの中で import mysql.connector と書くことで、データベースを操作する機能が使えるようになります。 誰かが一生懸命作ってくれたこの便利なツールを使うことで、わたしたちは複雑な通信の仕組みを気にせずにデータを扱えるんです。そう思うと、少しワクワクしませんか...?

データベースに接続してみる


Hirokiのアイコン
【Hiroki】 はい、ワクワクします! では、実際にPythonからMySQLに接続するコードを書いてみたいです。


Yukiのアイコン
【Yuki】 分かりました。 まずは、データベースに「もしもし、繋いでください」と挨拶をするコードを書いてみましょう。 接続には「ホスト名」「ユーザー名」「パスワード」といった情報が必要になります。

import mysql.connector

try:
    # データベースへの接続設定
    conn = mysql.connector.connect(
        host='localhost',      # サーバーの場所(自分のPCならlocalhost)
        user='root',           # ユーザー名
        password='your_password', # パスワード
        database='test_db'     # 操作したいデータベース名
    )

    if conn.is_connected():
        print("データベースに無事に接続できました!")

except mysql.connector.Error as e:
    print(f"エラーが発生しました: {e}")

finally:
    # 接続が開いている場合は閉じる
    if 'conn' in locals() and conn.is_connected():
        conn.close()
        print("接続を終了しました。")


Hirokiのアイコン
【Hiroki】 おぉ、これで接続ができるんですね! でも、最後にある conn.close() というのは何のためにあるんですか?


Yukiのアイコン
【Yuki】 それはとても大切な質問ですね...。 データベースへの接続は、いわば「専用の電話回線」を引いているようなものです。 使い終わった後にそのままにしておくと、回線が占領されたままになってしまい、他の人が接続できなくなったり、コンピューターに負荷がかかったりしてしまいます。 「使い終わったら片付ける」というのは、プログラミングでもとても重要なマナーなんですよ。

テーブルを作ってデータを保存する準備をする


Hirokiのアイコン
【Hiroki】 なるほど、後片付けが大事なんですね。覚えておきます。 接続ができたら、次はデータを保存する場所を作りたいです。


Yukiのアイコン
【Yuki】 そうですね。データベースの中に「テーブル」という表を作りましょう。 ここでは、SQLというデータベース専用の言語を使って命令を出します。 PythonからSQLを実行するには、「カーソル(Cursor)」というオブジェクトを使います。


Hirokiのアイコン
【Hiroki】 カーソル...ですか?


Yukiのアイコン
【Yuki】 はい。イメージとしては、データベースというノートの上で文字を書いたり消したりする「ペン」のようなものだと思ってください。 まずは、ユーザー情報を保存する users というテーブルを作ってみましょう。

import mysql.connector

conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='test_db'
)

cursor = conn.cursor()

# テーブルを作成するSQL
create_table_query = """
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""

try:
    cursor.execute(create_table_query)
    print("テーブルが作成されました。")
except mysql.connector.Error as e:
    print(f"テーブル作成エラー: {e}")

cursor.close()
conn.close()


Hirokiのアイコン
【Hiroki】 cursor.execute() でSQLを実行しているんですね。 INTVARCHAR というのは、データの種類の指定でしょうか?


Yukiのアイコン
【Yuki】 その通りです。よく気づきましたね、Hirokiくん。 INT は整数、VARCHAR は可変長の文字列という意味です。 データベースは、どんな種類のデータが入るかをあらかじめ厳しく決めておくことで、データの正確さを保っているんです。 少し控えめな性格のシステムですが、その分とても信頼できるんですよ...。

データを追加する(INSERT)


Hirokiのアイコン
【Hiroki】 テーブルができたので、次は実際にユーザーの名前やメールアドレスを登録してみたいです!


Yukiのアイコン
【Yuki】 では、データを追加する「INSERT」という操作をしてみましょう。 ここで一つ、とても大切なことがあります。 データを追加したり変更したりした後は、必ず「コミット(commit)」という作業をしなければなりません。


Hirokiのアイコン
【Hiroki】 コミット...?


Yukiのアイコン
【Yuki】 ええ。「今の操作を確定させて、保存してください」という最終確認のようなものです。 これを忘れると、プログラム上では実行したつもりでも、実際のデータベースには反映されないので注意してくださいね。

# データを挿入するSQL
insert_query = "INSERT INTO users (name, email) VALUES (%s, %s)"
user_data = ("Hiroki", "hiroki@example.com")

try:
    cursor = conn.cursor()
    cursor.execute(insert_query, user_data)

    # 変更を確定させる
    conn.commit()
    print(f"{cursor.rowcount} 件のデータが挿入されました。")
except mysql.connector.Error as e:
    print(f"データ挿入エラー: {e}")
    # エラーが起きた場合は取り消す(ロールバック)
    conn.rollback()


Hirokiのアイコン
【Hiroki】 あ、SQLの中に %s という記号がありますね。これは何ですか?


Yukiのアイコン
【Yuki】 それは「プレースホルダ」と呼ばれるものです。 データを直接SQLの文字列の中に書き込むのではなく、後から安全に入れ込むための空席のようなものです。 これを使わずに文字列を連結してSQLを作ってしまうと、「SQLインジェクション」という重大なセキュリティ被害の原因になってしまうことがあります。 少し難しいかもしれませんが、「外部から入ってくるデータは必ずプレースホルダを通す」と覚えておいてくださいね。 大切なデータを守るための、プログラマーとしての優しさだと思ってください...。

データを取得する(SELECT)


Hirokiのアイコン
【Hiroki】 セキュリティも大事なんですね。気をつけます! 保存したデータを取り出すにはどうすればいいですか?


Yukiのアイコン
【Yuki】 データを取り出すには「SELECT」を使います。 取り出した結果は、カーソルから受け取ることができますよ。

select_query = "SELECT id, name, email FROM users"

try:
    cursor = conn.cursor()
    cursor.execute(select_query)

    # すべてのデータを取得する
    rows = cursor.fetchall()

    for row in rows:
        print(f"ID: {row[0]}, 名前: {row[1]}, メール: {row[2]}")

except mysql.connector.Error as e:
    print(f"データ取得エラー: {e}")


Hirokiのアイコン
【Hiroki】 cursor.fetchall() で全部まとめて取得できるんですね! 1件だけ取り出したい時もあるんですか?


Yukiのアイコン
【Yuki】 はい、あります。その場合は fetchone() を使います。 検索条件を指定したい時は、SQLに WHERE 句を追加します。 特定のユーザーだけを探したい時などに便利ですよ。

データを更新・削除する(UPDATE / DELETE)


Hirokiのアイコン
【Hiroki】 だんだん使い方が分かってきました。 もし登録した情報を書き換えたり、消したりしたい時はどうするんでしょう?


Yukiのアイコン
【Yuki】 更新には「UPDATE」、削除には「DELETE」を使います。 どちらも「どのデータを対象にするか」を WHERE で正しく指定することが非常に重要です。 もし WHERE を書き忘れると、テーブル内のすべてのデータが更新されたり消えたりしてしまいます...。 想像するだけで、少し怖くなってしまいますよね。

# データの更新
update_query = "UPDATE users SET email = %s WHERE name = %s"
new_data = ("new_hiroki@example.com", "Hiroki")

cursor.execute(update_query, new_data)
conn.commit()

# データの削除
delete_query = "DELETE FROM users WHERE id = %s"
user_id = (1,) # タプルにするためにカンマが必要です

cursor.execute(delete_query, user_id)
conn.commit()


Hirokiのアイコン
【Hiroki】 すべてのデータが消える...! それは絶対に避けたいです。 実行する前に、しっかり確認するようにします。


Yukiのアイコン
【Yuki】 ええ、その意気です。 慎重すぎるくらいが、ちょうどいいのだと思いますよ。

エラー処理とリソースの解放を忘れずに


Hirokiのアイコン
【Hiroki】 ここまでの一連の流れで、PythonからMySQLを自由に操れる気がしてきました!


Yukiのアイコン
【Yuki】 それは良かったです。 最後に、実際の開発で役立つポイントをまとめておきますね。 プログラムはいつか必ずエラーが起きるものです。 ですから、今回のように try...except...finally 文を使って、エラーが起きても安全に接続を閉じられるように書いておくのが、プロの書き方と言えます。

また、大規模なアプリケーションを作る場合は、毎回接続して閉じて...と繰り返すのは効率が悪いので、「コネクションプール」という技術を使ったりもします。 でも、まずは今回の基本をしっかりマスターすることが大切だと思います。


Hirokiのアイコン
【Hiroki】 わかりました! 基本を繰り返して、自分のプロジェクトでもデータベースを使ってみようと思います。 Yukiさん、丁寧に教えてくれてありがとうございました!


Yukiのアイコン
【Yuki】 どういたしまして。Hirokiくんの役に立てたなら、わたしも嬉しいです。 データベースを自由に扱えるようになれば、Hirokiくんが作りたいと思っているアプリが、きっと現実のものになるはずですよ。 また何か分からないことがあったら、いつでも聞いてくださいね。 夜はまだ長いですから、ゆっくり自分のペースで進めていきましょう...。


参考文献



< PyInstaller
コラム一覧に戻る
Pip >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki