Pythonでデータベーストランザクションを安全に実行する方法(commitとrollbackの基本)
トランザクションとは、データベースにおけるデータの一貫性(整合性)を保証するための重要な仕組みです。複数の処理をひとまとまりの作業として扱い、すべてが成功するか、あるいは一切実行されないかのどちらかになるように制御します。
トランザクションには、ACID特性と呼ばれる以下の4つの基本的な性質があります。
トランザクションの4つの特性(ACID特性)
- 原子性(Atomicity) − トランザクションは完全に完了するか、まったく実行されないかのどちらかです。途中状態で終わることはありません。
- 一貫性(Consistency) − トランザクションは一貫した状態から開始し、終了時にもシステムを一貫した状態に保たなければなりません。
- 分離性(Isolation) − トランザクションの途中結果は、そのトランザクションの外部からは見えません。他の処理に影響を与えることもありません。
- 永続性(Durability) − 一度コミットされたトランザクションの結果は、システム障害が発生しても失われることなく保持されます。
Python DB API 2.0によるトランザクション制御
PythonのDB API 2.0では、トランザクションを制御するためにcommit()メソッドとrollback()メソッドの2つが提供されています。
commit(): データベースへの変更を確定し、永続的に保存します。rollback(): エラーが発生した場合などに、変更を取り消して元の状態に戻します。
実装例
以下は、DELETE文を使ってレコードを削除し、トランザクション制御を行う典型的なコード例です。
# 削除対象のレコードを指定するSQLクエリを準備
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# SQLコマンドを実行
cursor.execute(sql)
# 変更をデータベースにコミット
db.commit()
except:
# エラーが発生した場合はロールバック
db.rollback()コードのポイント
この例では、tryブロック内でSQLを実行し、成功すればdb.commit()によって変更が確定されます。一方、何らかのエラーが発生した場合にはexceptブロックが呼ばれ、db.rollback()によって変更が取り消されます。
このようにcommitとrollbackを適切に組み合わせることで、予期しないエラーが発生してもデータベースの一貫性を保つことができます。実際のアプリケーション開発では、金額の移動や在庫管理など、複数の更新処理が絡む場面でトランザクション制御は不可欠なテクニックとなります。
-
PythonコードでGoogle検索を自動化する方法|googlesearchモジュールの使い方
はじめに この記事では、Pythonのコードを使ってGoogle検索を実行する方法を解説します。Pythonプロジェクトの開発中にWeb上のデータへアクセスしたり、Googleの検索結果をプログラム内で利用したりしたい場合に、この手法がとても便利です。 前提条件 システムにPythonがインストールされていること 「google」モジュールがインストールされていること(pipで以下のように導入できます) C:\Users\rajesh>python -m pip install google Collecting google Downloading https://files.p
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c