前回の投稿で、PythonでSQLite3を使用する基本的な方法について説明しました。今回は、その応用編として、データベースのレコードを追加・更新する方法や、テーブルを削除する方法、データを一括削除する方法について解説します。それぞれの操作について、サンプルコードを含めて説明します。
データを挿入する(INSERT)
作成したテーブルにデータを挿入する方法を見ていきましょう。
# データベースに接続
conn = sqlite3.connect(db_file)
# カーソルオブジェクトを作成
cur = conn.cursor()
# データを挿入
cur.execute("INSERT INTO employees (id, name, age, salary) VALUES (?, ?, ?, ?)", (1, "John Doe", 30, 5000.0))
# 変更をコミット
conn.commit()
# 接続をクローズ
conn.close()
データを挿入するには、INSERT INTO
文を使用します。ここでは、employees
テーブルに1つの行を挿入しています。?
を使用して、パラメータを指定し、execute()
メソッドの2番目の引数で、実際の値を指定します。
レコードを更新する(UPDATE)
UPDATE
文を使用することで、テーブルのレコードを更新することができます。以下は、employeesテーブルのnameを”John Doe”から”Jane Smith”に変更する例です。
# データベースに接続
conn = sqlite3.connect(db_file)
# カーソルオブジェクトを作成
cur = conn.cursor()
# データを更新
cur.execute("UPDATE employees SET name = ? WHERE id = ?", ("Jane Smith", 1))
# 変更をコミット
conn.commit()
# 接続をクローズ
conn.close()
UPDATE
文では、SET
句で変更したいカラムと値を指定し、WHERE
句で更新するレコードを特定します。この例では、idが1のレコードのnameを”Jane Smith”に変更しています。
テーブルを削除する(DROP)
DROP
文を使用することで、テーブルを削除することができます。以下は、employeesテーブルを削除する例です。
# データベースに接続
conn = sqlite3.connect(db_file)
# カーソルオブジェクトを作成
cur = conn.cursor()
# テーブルを削除
cur.execute("DROP TABLE IF EXISTS employees")
# 変更をコミット
conn.commit()
# 接続をクローズ
conn.close()
DROP
文では、TABLE
キーワードの後に削除したいテーブル名を指定します。この例では、IF EXISTS
句を使用して、employeesテーブルが存在する場合にのみ削除するようにしています。
レコードを削除する(DELETE)
DELETE
文を使用することで、テーブルのレコードを削除することができます。以下は、employeesテーブルのidが1のレコードを削除する例です。
# データベースに接続
conn = sqlite3.connect(db_file)
# カーソルオブジェクトを作成
cur = conn.cursor()
# データを削除
cur.execute("DELETE FROM employees WHERE id = ?", (1,))
# 変更をコミット
conn.commit()
# 接続をクローズ
conn.close()
DELETE
文では、FROM
キーワードの後に削除したいテーブル名を指定し、WHERE
句で削除するレコードを特定します。この例では、idが1のレコードを削除しています。WHERE
句で条件を指定する場合は、プレースホルダを使用して変数を渡すことができます。
テーブルのデータを一括削除する
DELETE
文を以下のように使用することで、テーブルのデータを一括削除することができます。以下は、employeesテーブルのデータを一括削除する例です。
# データベースに接続
conn = sqlite3.connect(db_file)
# カーソルオブジェクトを作成
cur = conn.cursor()
# テーブルのデータを一括削除
cur.execute("DELETE FROM employees")
# 変更をコミット
conn.commit()
# 接続をクローズ
conn.close()
SQLite3ではTRUNCATE
文がサポートされていないため、代わりにDELETE
文を使用してデータを一括削除することが一般的です。DELETE
文では、FROM
キーワードの後にテーブル名を指定し、条件を指定することで削除するレコードを特定します。この例では、employeesテーブルの全てのデータを削除するため、WHERE
句を省略しています。
クラスを使う場合
SQLite3を使う際にクラスを使用する場合のサンプルコードを以下に示します。このコードは、データベースに商品情報を格納し、検索する単純なクラスを示しています。
import sqlite3
class ProductDB:
def __init__(self, db_file):
self.conn = sqlite3.connect(db_file)
self.cur = self.conn.cursor()
self.cur.execute('''CREATE TABLE IF NOT EXISTS products
(id INTEGER PRIMARY KEY,
name TEXT,
price REAL,
description TEXT)''')
self.conn.commit()
def add_product(self, name, price, description):
self.cur.execute('''INSERT INTO products (name, price, description)
VALUES (?, ?, ?)''', (name, price, description))
self.conn.commit()
def get_product(self, name):
self.cur.execute('''SELECT * FROM products WHERE name = ?''', (name,))
return self.cur.fetchone()
def close(self):
self.conn.close()
このクラスは、__init__
メソッドでデータベースファイルを開き、テーブルを作成します。add_product
メソッドは、商品の名前、価格、説明を引数として受け取り、それらをデータベースに挿入します。get_product
メソッドは、商品の名前を引数として受け取り、その商品の情報を返します。最後に、close
メソッドでデータベース接続を閉じます。
以下は、このクラスを使用する例です。
db = ProductDB('products.db')
db.add_product('apple', 1.5, 'fresh and juicy')
db.add_product('banana', 2.0, 'rich in potassium')
print(db.get_product('apple'))
print(db.get_product('banana'))
db.close()
この例では、ProductDB
クラスのインスタンスを作成し、add_product
メソッドで商品情報を追加します。その後、get_product
メソッドで商品情報を検索し、結果を表示します。最後に、close
メソッドでデータベース接続を閉じます。
まとめ
以上が、PythonでSQLite3を使用して、データベースのレコードを更新する方法、テーブルを削除する方法、データを一括削除する方法についての解説です。これらの操作を使用することで、SQLite3を効果的に利用することができます。