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