Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
生徒
「Pythonでデータベースにデータを保存するとき、途中で失敗したらどうなるんですか?」
先生
「そのままだと、途中までの処理だけが残ってしまうことがあります。そこで必要になるのがトランザクション処理です。」
生徒
「トランザクションって、なんだか難しそうな言葉ですね……」
先生
「安心してください。まとめて処理して、成功したら確定、失敗したら取り消す仕組みだと考えると分かりやすいですよ。」
1. トランザクション処理とは何か
トランザクション処理とは、複数のSQL操作をひとまとまりとして扱う仕組みです。全部うまくいったときだけ結果を保存し、途中で問題が起きたら最初からなかったことにします。銀行での振り込みのように、「減らす」「増やす」をセットで行うイメージです。
2. なぜトランザクションが必要なのか
データベース操作では、登録や更新を連続して行うことがよくあります。もし途中でエラーが起きると、データが中途半端な状態で残ってしまいます。これを防ぐために、トランザクション処理を使ってデータの整合性を守ります。
3. commitとrollbackの基本
commitは「ここまでの変更を確定する」という命令です。一方、rollbackは「変更をすべて取り消す」という命令です。この二つを使い分けることで、安全なデータベース操作ができます。
4. SQLiteでの基本的なトランザクション例
Python標準のsqlite3では、接続した時点でトランザクションが始まります。commitを呼び出すまで、変更は仮の状態です。
import sqlite3
conn = sqlite3.connect("sample.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name) VALUES ('田中')")
conn.commit()
5. rollbackを使った取り消し処理
処理中に問題が起きた場合、rollbackを使うと変更を元に戻せます。これにより、データベースは安全な状態を保てます。
cursor.execute("INSERT INTO users (name) VALUES ('佐藤')")
conn.rollback()
6. 例外と組み合わせた実践的な使い方
実際のプログラムでは、エラーが起きる可能性を考えて処理します。成功したらcommit、失敗したらrollbackという流れが基本です。
try:
cursor.execute("INSERT INTO users (name) VALUES ('鈴木')")
cursor.execute("INSERT INTO users (name) VALUES ('高橋')")
conn.commit()
except:
conn.rollback()
7. トランザクションの考え方を身近な例で理解する
トランザクションは「まとめ買い」に似ています。全部の商品がそろって初めて会計が成立します。途中で在庫切れが分かったら、最初から買わなかったことにします。この考え方がcommitとrollbackです。
8. 初心者がつまずきやすい注意点
commitを忘れると、せっかく登録したデータが保存されません。また、rollbackはcommit前しか効果がありません。処理の流れを意識して書くことが大切です。