Python MySQL レコードセットを使ってデータを更新する

PythonでMySQLのデータベースを操作し、レコードセット(カーソル)を使ってデータを更新する方法を解説します。主に使用するライブラリは mysql-connector-python または PyMySQL です。ここでは mysql-connector-python を使った例を紹介します。


目次

🔧 必要な準備

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

pip install mysql-connector-python

📘 基本構文:UPDATE文を使ったレコード更新

import mysql.connector

# データベースへ接続
conn = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database"
)

# カーソルを作成
cursor = conn.cursor()

# 更新するSQL(例:user_idが1のユーザーの名前を変更)
sql = "UPDATE users SET name = %s WHERE user_id = %s"
params = ("新しい名前", 1)

# SQL文を実行
cursor.execute(sql, params)

# 変更を確定(コミット)
conn.commit()

# 結果の表示(更新された件数)
print(f"{cursor.rowcount} 件のレコードが更新されました。")

# リソースのクローズ
cursor.close()
conn.close()

✅ ポイント解説

項目説明
conn.cursor()レコードセット(カーソル)を作成。これでSQLを実行可能
cursor.execute()SQL文を発行。プレースホルダ %s を使うことでSQLインジェクション対策にもなる
conn.commit()UPDATEINSERTDELETEなどの変更は、必ず明示的にコミット
cursor.rowcount更新されたレコード数を取得
cursor.close() / conn.close()最後にリソースを解放することが重要

🔄 ループで複数レコードを更新したいとき

data = [
    ("田中太郎", 1),
    ("鈴木花子", 2),
    ("佐藤健", 3)
]

sql = "UPDATE users SET name = %s WHERE user_id = %s"

cursor.executemany(sql, data)
conn.commit()

🧪 レコード取得後に条件に応じて更新

cursor.execute("SELECT user_id, name FROM users")
rows = cursor.fetchall()

for user_id, name in rows:
    if "旧" in name:
        new_name = name.replace("旧", "新")
        cursor.execute("UPDATE users SET name = %s WHERE user_id = %s", (new_name, user_id))

conn.commit()

  • PyMySQL版の例
  • ORM(SQLAlchemy)での更新
よかったらシェアしてね!
目次