見出し画像

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文を使用します。

UPDATE テーブル名
SET 更新したいカラム名 = '更新したいデータ'
WHERE 抽出条件

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句でどのレコードを削除するか指定する必要があります。

DELETE FROM テーブル名
WHERE 抽出条件

サンプルデータとして追加したNo=13を削除します。

cur.execute("""
            DELETE FROM Aug2024
            WHERE No = 13
            """)
db.commit()

指定したレコードが削除されていることが確認できました。

cur.close()
db.close()

今回を含め3回の投稿でデータベースの基本操作CRUDについて紹介しました。SQLite3はexecute()の引数にSQL文を入れることでデータベース操作をpythonコードの中で行うことができるため非常に便利です。
データベース操作を行うことができると、プログラミングで作成できるプロダクトの幅が拡がります。もちろん業務への活用性も大きいと思います!

この記事が気に入ったらサポートをしてみませんか?