SQLite データベース編集
今回はデータベースの編集についてです。CRUDでいうところのUpdate(更新)とDelete(削除)の部分です。CRUDについては前回の投稿を参照してください。
テーブルの確認・データの準備
前回、前々回の投稿で作成したdrugs.dbを引き続き使用します。
import sqlite3
db = sqlite3.connect("drugs.db")
cur = db.cursor()
drugs.dbにはこれまで作成したテーブルが含まれます。以下のコードで確認することができます。
# データベース内のテーブル一覧を取得
cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
# 結果を取得して表示
tables = cur.fetchall()
for table in tables:
print(table[0])
>Aug2024
sqlite_sequence
GLP1
実行すると、3つのテーブルが含まれていることが分かります。2番目のsqlite_sequence は、SQLite が AUTOINCREMENT(ユニークな整数値を自動で主キーに割当てる)を使用するテーブルで管理するために自動的に作成される特殊なテーブルです。Aug2024を作成した時に使用しましたね。
Aug2024テーブルにサンプルデータとして以下をINSERTしておきます。データベースへの変更を確定させるにはcommit()を行います。これを行わないと、変更がデータベースに反映されないので注意してください。
cur.execute("INSERT INTO Aug2024 (name, form) VALUES (?, ?)", ('レパーサ皮下注140mgペン', 2))
db.commit()
Aug2024の中身はこんな感じになっています。主キーのNoも自動的に13が付加されています。
cur.execute("SELECT * FROM Aug2024")
rows = cur.fetchall()
for row in rows:
print(row)
データの更新 UPDATE
既に作成したテーブルの情報を修正したいときにUPDATE文を使用します。
WHERE句を使用してどのレコードを更新するか指定します。なので、WHERE句を忘れてしまうと全てのレコードで指定したカラムのデータが変更されてしまうので注意しましょう。
例えば、form(剤型)が飲み薬のレコードは「1」で登録されていますが、「1000」に変えたいとします。
cur.execute("""
UPDATE Aug2024
SET form = 1000
WHERE form = 1
""")
UPDATE文でformを1から1000に置換することができました(後々使うので1000は元の1に戻しておいてください)。
もちろん、複数カラムを更新することも出来ます。先ほど追加したNo=13のレコードを更新してみましょう。複数カラムを指定する時はSET句を「,」で繋ぎます。
cur.execute("""
UPDATE Aug2024
SET name = 'ノルバスク錠5mg',
form = 1
WHERE No = 13
""")
db.commit()
No=13のレパーサ皮下注(剤型:2)のレコードをノルバスク錠(剤型:1)
に更新できました。
データの削除 DELETE
データ削除する時はDELETE文を使用します。UPDATE文同様WHERE句でどのレコードを削除するか指定する必要があります。
サンプルデータとして追加したNo=13を削除します。
cur.execute("""
DELETE FROM Aug2024
WHERE No = 13
""")
db.commit()
指定したレコードが削除されていることが確認できました。
cur.close()
db.close()
今回を含め3回の投稿でデータベースの基本操作CRUDについて紹介しました。SQLite3はexecute()の引数にSQL文を入れることでデータベース操作をpythonコードの中で行うことができるため非常に便利です。
データベース操作を行うことができると、プログラミングで作成できるプロダクトの幅が拡がります。もちろん業務への活用性も大きいと思います!