田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【sqlite3】レコードを削除・更新する方法【Python】

f:id:vigilantPotato:20210704082302p:plain
Pythonの組込みモジュールであるsqlite3を用いてデータベースファイルのレコードを削除・更新する方法を整理する。 データベースの作成方法は、以下の記事を参照。


【スポンサーリンク】


データベースの準備

まず、以下のコードを実行してサンプルデータベースを作成する。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "text.db",              #ファイル名
    isolation_level=None,
)

#フィールド作成用SQL文
sql = """
    CREATE TABLE Fruit (
        id INTEGER PRIMARY KEY,
        name VARCHAR(20),
        price INTEGER
    );
"""

db.execute(sql) #sql文を実行

#登録データ
r = [(1, "banana", 130), (2, "apple", 100), (3, "orange", 198)]

#レコード一括登録登録用SQL文
sql = """
    INSERT INTO Fruit VALUES (
        ?, ?, ?
    )
"""

db.executemany(sql, r)  #sql文を実行
db.close()              #データベースを閉じる

作成されるデータベースは以下の通り。今回の例ではidをPRIMARY KEYに設定してあるため、レコード内で重複したidを設定することはできない。

テーブル名:Fruit

id name price
1 banana 130
2 apple 100
3 orange 198

[↑ 目次へ]

レコードを削除

サンプルデータベース中から、名前がappleのレコードを削除する方法を示す。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "text.db",              #ファイル名
    isolation_level=None,
)

#レコード削除用SQL文
sql = """DELETE FROM Fruit WHERE name="apple";"""

db.execute(sql)  #sql文を実行
db.close()      #データベースを閉じる

SQLコマンドDELETE FROM テーブル名 WHERE 条件を実行することで、特定のレコードを削除することができる。上記の例では、条件の項目をname="apple"に設定しているため、作成したテーブルの中から(2, apple, 100)のレコードが削除される。

[↑ 目次へ]


【スポンサーリンク】


レコードを更新

データベースに登録されているレコードを更新する例を示す。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "text.db",              #ファイル名
    isolation_level=None,
)

#レコード削除用SQL文
sql = """UPDATE Fruit SET price = "150" WHERE id = "1";"""

db.execute(sql)  #sql文を実行
db.close()      #データベースを閉じる

SQLコマンドUPDATE テーブル名 SET 更新後のデータ WHERE 条件;を実行することで、条件に当てはまるレコードの値を更新することができる。上記の例では、idが1のレコードのpriceを150に更新している。

[↑ 目次へ]

レコードを更新または挿入

SQLコマンドREPLACEを使用すると、レコードの更新と挿入の両方に対応することができる。ただし、REPLACEコマンドでレコードの更新を行う場合は、テーブル作成時にPRIMARY KEYを指定しておく必要がある。設定していない場合はレコードの更新は行われず、新規のレコードとして登録されてしまう。

以下、サンプルデータベースのid=3の項目に対し、priceを250に更新する例を示す。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "text.db",              #ファイル名
    isolation_level=None,
)

#レコード更新用SQL文(REPLACE)
sql = """REPLACE INTO Fruit
    (id, name, price)
    VALUES(3, orange, 250)
    """

db.execute(sql)  #sql文を実行
db.close()      #データベースを閉じる

SQLコマンドREPLACE INTO テーブル名 フィールド レコードを実行することで、既存のレコードを更新することができる。この時、PRIMARY KEYであるidがデータベース内に存在しない場合は、新規のレコードとして登録される。

[↑ 目次へ]


【スポンサーリンク】