Pythonでデータベースを更新する方法|UPDATE操作の基本とサンプルコード
データベースにおけるUPDATE操作とは、すでにデータベース内に存在する1件以上のレコードの値を変更することを指します。INSERTが新しいデータの追加であるのに対し、UPDATEは既存データの修正を行うための基本的なSQLコマンドです。
UPDATE操作の概要
UPDATE文は、WHERE句で指定した条件に一致するレコードだけを対象に、特定のカラム(列)の値を書き換えます。WHERE句を省略するとテーブル内の全レコードが更新されてしまうため、実行前には必ず更新範囲を確認することが重要です。
以下の例では、SEX(性別)が「M」のすべてのレコードを対象に、AGE(年齢)を1歳増やす処理を行います。
サンプルコード
#!/usr/bin/python
import MySQLdb
# データベースへの接続を開く
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB")
# cursor()メソッドでカーソルオブジェクトを準備
cursor = db.cursor()
# 更新対象のレコードを指定するSQLクエリを準備
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# SQLコマンドを実行
cursor.execute(sql)
# 変更内容をデータベースに確定(コミット)
db.commit()
except:
# エラー発生時は変更を取り消す(ロールバック)
db.rollback()
# サーバーとの接続を切断
db.close()
コードの解説
1. データベースへの接続
MySQLdb.connect()メソッドにホスト名、ユーザー名、パスワード、データベース名を渡して接続を確立します。
2. カーソルの作成とSQLの実行
cursor()メソッドで取得したカーソルオブジェクトに対してexecute()を呼び出すことで、UPDATE文が実行されます。この例では「SEX = 'M'」という条件に一致する全レコードのAGEが+1されます。
3. commit()とrollback()によるトランザクション管理
UPDATEのようなデータ変更操作では、db.commit()を呼び出して初めて変更がデータベースに反映されます。一方、実行中にエラーが発生した場合はexceptブロック内のdb.rollback()により、変更前の状態に戻すことができます。この仕組みによって、データの整合性が保たれます。
4. 接続の切断
処理が完了したらdb.close()で接続を閉じ、リソースを解放します。
補足:より安全なSQLの書き方
文字列フォーマットでSQLを組み立てる方法は手軽ですが、外部からの入力値を扱う場合はSQLインジェクションの危険があります。実務では、プレースホルダを使ったパラメータ化クエリ(例:cursor.execute("UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = %s", ('M',)))を採用することが推奨されます。
-
Pythonの「<>」演算子とは?Python 2とPython 3での違いを解説
Pythonには、2つの値が「等しくない」ことを判定するための比較演算子として、かつて「<>」という記法が存在していました。これは数式における「≠」に相当する演算子で、Python 2.x系で利用できました。同じ動作をする「!=」演算子もありますが、Python 3.xでは「<>」演算子は廃止され、使用するとエラーになる点に注意が必要です。 Python 2.7での使用例 Python 2.7では、「<>」と「!=」のどちらも「等しくない」判定として同じ結果を返します。 >>> a=5 >>> b=7 >>&g
-
Pythonで辞書の値を更新する方法|update()メソッドの使い方を解説
Pythonの組み込み型である辞書(dict)クラスには、update()メソッドが標準で用意されています。このメソッドは、別の辞書オブジェクトを引数として受け取り、呼び出し元の辞書にマージ(統合)することができます。 基本構文 D1.update(D2) 動作の仕組み D2の内容がD1に統合されます。このとき、キーの有無によって以下のように挙動が変わります。 D2のキーがD1にすでに存在する場合:そのキーの値がD2の値で上書き(更新)されます。 D2のキーがD1に存在しない場合:新しいキーと値のペアとしてD1に追加されます。 実行後、D1は更新された内容を保持します。 使用例 >&