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';
Engine が InnoDB であればOK。
トランザクションを使うコードに、ログ出力や複数テーブルの一括操作なども組み込み可能です。
必要であれば応用例を提示できます。
