PythonでSQLのトリガー・ストアドプロシージャを活用する基本を初心者向けに完全解説
生徒
「PythonでSQLデータベースを使っていると、毎回同じ処理を書くのが大変です…」
先生
「そんなときは、SQLのトリガーやストアドプロシージャを使うと、データベース側で自動処理ができます。」
生徒
「Pythonのコードじゃなくて、SQLの機能なんですか?」
先生
「はい。Pythonと組み合わせることで、処理が整理されてとても分かりやすくなります。」
1. SQLのトリガーとは何か
SQLのトリガーとは、データベースで特定の操作が行われたときに、自動で実行される処理のことです。たとえば「データが追加されたら自動で記録を残す」といった動きをします。人がボタンを押さなくても反応する自動ドアのような仕組みです。
2. トリガーが動くタイミング
トリガーは、INSERT(追加)、UPDATE(更新)、DELETE(削除)といったSQL操作をきっかけに動きます。PythonからSQLを実行した場合でも、条件に合えば自動で処理されるため、Python側のコードを増やさずに済みます。
3. SQLiteでトリガーを作成する基本例
Python初心者には、軽く使えるSQLiteがおすすめです。SQLiteはストアドプロシージャは使えませんが、トリガーは利用できます。ここでは、データ追加時にログを残す簡単な例を見てみます。
import sqlite3
conn = sqlite3.connect("sample.db")
cur = conn.cursor()
cur.execute("""
CREATE TRIGGER user_insert_trigger
AFTER INSERT ON users
BEGIN
INSERT INTO logs(message) VALUES ('ユーザーが追加されました');
END;
""")
conn.commit()
conn.close()
4. Pythonからトリガーを意識せずに使う
トリガーはデータベース側の仕組みなので、Pythonでは特別な書き方は不要です。通常通りINSERT文を実行するだけで、自動処理が行われます。これにより、Pythonコードがとてもシンプルになります。
import sqlite3
conn = sqlite3.connect("sample.db")
cur = conn.cursor()
cur.execute("INSERT INTO users(name) VALUES ('田中')")
conn.commit()
conn.close()
5. ストアドプロシージャとは何か
ストアドプロシージャとは、SQLの処理をひとまとめにして、名前を付けて保存する仕組みです。よく使う処理を一つの箱にまとめておき、必要なときに呼び出すイメージです。処理手順を覚えてくれるメモ帳のような存在です。
6. Pythonとストアドプロシージャの関係
SQLiteではストアドプロシージャは使えませんが、MySQLやPostgreSQLでは利用できます。Pythonからは、通常のSQL文として呼び出すだけなので、難しい操作は不要です。データベース側に処理を任せることで、Pythonの役割が分かりやすくなります。
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
cur.execute("CALL add_user('佐藤')")
conn.commit()
conn.close()
7. トリガーとストアドプロシージャの使い分け
トリガーは自動で動かしたい処理に向いています。一方、ストアドプロシージャは、必要なときにまとめて処理したい場合に便利です。PythonとSQLを組み合わせることで、それぞれの得意分野を活かした設計ができます。
8. 初心者が注意したいポイント
トリガーやストアドプロシージャは便利ですが、処理が見えにくくなることがあります。最初は「どこで何が動いているか」を意識しながら使うことが大切です。PythonのコードとSQLの役割を分けて考えると、理解しやすくなります。