[Python] sqlite3の使い方(2)

前回の投稿で、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を効果的に利用することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次