Pythonのsqlite3におけるロールバックする方法

Pythonのsqlite3ライブラリを使用してSQLiteデータベース内でトランザクションをロールバック(取り消し)する方法を説明します。トランザクションをロールバックすることは、トランザクション内の変更を元に戻すために使用されます。

以下は、ロールバックの基本的な手順です:

  1. データベースに接続し、カーソル(Cursor)オブジェクトを作成します。
python
import sqlite3

# データベースに接続
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
  1. トランザクションを開始します。トランザクション内の操作は、コミットまたはロールバックまで一括して処理されます。
python
try:
    # トランザクションを開始
    conn.begin()
    
    # データベース操作を実行
    cursor.execute("INSERT INTO mytable (name, age) VALUES (?, ?)", ("John", 30))
    
    # ロールバックをテストするために意図的にエラーを発生させる
    raise Exception("エラーが発生しました")
    
    # コミットは実行されない
    conn.commit()
except Exception as e:
    # エラーが発生した場合、トランザクションをロールバック
    conn.rollback()
    print(f"トランザクションがロールバックされました: {e}")

上記の例では、トランザクション内でデータベース操作を実行し、意図的にエラーを発生させています。エラーが発生した場合、rollback()メソッドを呼び出してトランザクションをロールバックし、変更を元に戻します。ロールバックを実行することで、トランザクション内の変更がデータベースに適用されず、データベースは前の状態に戻ります。

  1. 最後に、接続を閉じます。
python
conn.close()

これで、トランザクションのロールバックが完了しました。エラーハンドリングを実装して、トランザクション内の操作が失敗した場合にロールバックを確実に実行することが重要です。