Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python×MySQLのrollback()メソッドとは?トランザクションの取り消し方法を解説

Pythonには、データベースのトランザクションを制御するためのさまざまなメソッドが用意されています。その中でも本記事で取り上げるのがrollback()メソッドです。

rollback()メソッドとは

rollback()メソッドは、データベースに対して行った直近の変更やコミットを取り消し(ロールバック)するために使用されます。たとえば、ユーザーがデータベースへの変更に満足できなかった場合や、トランザクションが何らかの理由で失敗した場合に、このメソッドを実行することで、変更を加える前の元の状態へデータベースを復元できます。

トランザクションが失敗した際にデータの整合性を保つために非常に重要なメソッドであり、実務でのデータベース操作において欠かせない存在です。

構文

db.rollback()

ここで「db」は、データベース接続オブジェクトを指します。

以下では、トランザクションが失敗した場合にrollback()を使って変更を取り消す具体例を紹介します。

PythonとMySQLでテーブルのトランザクションをロールバックする手順

  • MySQLコネクタをインポートする

  • connect()を使ってコネクタ経由でデータベースに接続する

  • cursor()メソッドでカーソルオブジェクトを作成する

  • UPDATEクエリを実行し、変更をコミットする

  • トランザクションが失敗した場合は、rollback()でトランザクションを取り消す

  • 接続を閉じる

サンプルコード

以下のコードは、STUDENTテーブル内の「Inder」という名前の学生のAGE(年齢)を更新しようとする例です。トランザクションが成功すれば更新が反映され、失敗した場合はロールバックされてデータベースが元の状態に戻ります。

import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode

try:
    db = mysql.connector.connect(
        host ='localhost',
        database ='database_name',
        user ='user_name'
        password='your_password',
    )

    cs = db.cursor()
    query ="UPDATE STUDENT SET AGE = 23 WHERE Name ='Inder'"
    cs.execute(query)

    # データベースへ変更をコミット
    db.commit()

    # 更新成功時のメッセージ
    print("Database Updated !")

except mysql.connector.Error as error :
    # 更新失敗時のエラーメッセージ
    print("Database Update Failed !: {}".format(error))

    # 例外発生のため変更を取り消し(ロールバック)
    db.rollback()

# データベースとの接続を切断
db.close()

実行結果

トランザクションが成功した場合:

Database Updated!

トランザクションが失敗した場合:

Database Update Failed!

このように、commit()とrollback()を組み合わせて例外処理を実装しておくことで、予期しないエラーが発生してもデータベースの整合性を守ることができます。

  1. MySQLデータベースにおけるdatetime型の正しい書式とは?

    MySQLデータベースにおけるdatetime型の正しい書式MySQLデータベースでdatetime型を扱う際の正しい書式は、以下の通りです。YYYY-MM-DD HH:MM:SS年を4桁、月と日を2桁で表し、それぞれをハイフン(-)で区切ります。時刻部分は24時間表記で、「時:分:秒」の順にコロン(:)で区切って指定します。テーブルの作成まず、datetime型のカラムを持つテーブルを作成してみましょう。mysql> create table DemoTable797 (   ArrivalDatetime datetime);Query OK, 0 ro

  2. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す