トランザクション付き MySQL 接続

MySQL で トランザクションを有効にするには、Python 側で autocommit = False に設定し、明示的に commit() または rollback() を使います。


目次

✅ トランザクション付き MySQL 接続(Python + mysql-connector-python

import mysql.connector

# 接続設定(例)
config = {
    'host': 'localhost',
    'user': 'test_user',
    'password': 'test_password',
    'database': 'test_db',
    'port': 3306
}

try:
    conn = mysql.connector.connect(**config)
    conn.autocommit = False  # トランザクションを有効化
    cursor = conn.cursor()

    # --- トランザクション開始 ---
    cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Taro", 25))
    cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Jiro", 30))

    conn.commit()  # 正常ならコミット
    print("✅ トランザクション成功(コミット済)")

except mysql.connector.Error as e:
    print("❌ エラー発生:", e)
    conn.rollback()  # エラー時はロールバック
    print("🔄 ロールバック完了")

finally:
    if 'cursor' in locals(): cursor.close()
    if 'conn' in locals() and conn.is_connected(): conn.close()

✅ 注意点

ポイント説明
autocommit = False明示的にトランザクション制御するために必要
commit()全操作が成功したら呼び出す
rollback()例外が出たら呼び出すことでデータの一貫性を保つ
対象テーブルのストレージエンジンInnoDB である必要があります(MyISAM はトランザクション非対応)

🔍 InnoDBの確認方法(MySQL)

SHOW TABLE STATUS WHERE Name = 'users';

EngineInnoDB であればOK。


トランザクションを使うコードに、ログ出力や複数テーブルの一括操作なども組み込み可能です。
必要であれば応用例を提示できます。

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