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

PythonでMySQLに接続し、レコードセット(カーソル)を使ってデータを削除する方法を解説します。ここでは mysql-connector-python ライブラリを使用します。


目次

🔧 事前準備

1. ライブラリのインストール(未インストールの場合)

pip install mysql-connector-python

🗑️ 単一レコードを削除する基本例

import mysql.connector

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

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

# DELETE文(例:user_id=1 のレコードを削除)
sql = "DELETE FROM users WHERE user_id = %s"
params = (1,)  # タプルで渡す

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

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

print(f"{cursor.rowcount} 件のレコードが削除されました。")

# リソース解放
cursor.close()
conn.close()

🔁 条件に合う複数レコードを削除

sql = "DELETE FROM users WHERE email LIKE %s"
params = ("%@example.com",)

cursor.execute(sql, params)
conn.commit()

print(f"{cursor.rowcount} 件のレコードが削除されました。")

⚠️ テーブル全体を削除する例(注意!)

cursor.execute("DELETE FROM users")
conn.commit()

⚠️ **全削除(WHERE句なし)**は非常に危険なので、開発時以外は慎重に!


✅ ポイント解説

項目内容
%s値のプレースホルダ(MySQLでは ? ではなく %s
cursor.execute()SQL文の実行
conn.commit()DELETEなどの変更系SQLは必ずコミットが必要
cursor.rowcount実際に削除された行数を確認可能

🧪 応用:条件を確認してから削除

cursor.execute("SELECT user_id, name FROM users WHERE name LIKE %s", ("%田中%",))
rows = cursor.fetchall()

for user_id, name in rows:
    print(f"削除対象:{user_id}, {name}")
    cursor.execute("DELETE FROM users WHERE user_id = %s", (user_id,))

conn.commit()

🛠️ try…except を使ったエラーハンドリング(おすすめ)

try:
    conn = mysql.connector.connect(
        host="localhost",
        user="your_username",
        password="your_password",
        database="your_database"
    )
    cursor = conn.cursor()
    sql = "DELETE FROM users WHERE user_id = %s"
    cursor.execute(sql, (1,))
    conn.commit()
    print("削除成功")

except mysql.connector.Error as err:
    print(f"エラー: {err}")

finally:
    if cursor:
        cursor.close()
    if conn:
        conn.close()

よかったらシェアしてね!
目次