SQLite3は、Pythonで軽量なデータベースを操作するための非常に便利なモジュールです。SQLiteは、SQLを使ってリレーショナルデータベースを操作するためのライブラリであり、特にシンプルで構成が簡単なため、小規模なアプリケーションやプロジェクトにおいてよく利用されます。SQLiteは、データベースエンジン自体がPythonに組み込まれているため、別途インストールする必要はなく、標準ライブラリとして提供されています。
以下では、SQLite3を使ったデータベースの基本的な操作方法について、完全かつ包括的に説明します。

1. SQLite3の基本的な使用方法
SQLite3を使用するには、まずPythonでSQLite3モジュールをインポートする必要があります。次に、データベースに接続し、SQLクエリを実行してデータを操作することができます。
データベースの接続と作成
pythonimport sqlite3
# SQLiteデータベースに接続(ファイルが存在しない場合は新たに作成されます)
conn = sqlite3.connect('example.db')
# カーソルオブジェクトを作成
cursor = conn.cursor()
このコードでは、example.db
という名前のデータベースファイルに接続しています。もしそのファイルが存在しなければ、新しく作成されます。
2. テーブルの作成
SQLiteでは、CREATE TABLE
ステートメントを使用して新しいテーブルを作成します。例えば、以下のようにユーザー情報を保存するテーブルを作成することができます。
python# ユーザーテーブルを作成
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
''')
# 変更を保存
conn.commit()
このコードは、users
という名前のテーブルを作成します。テーブルには、id
(整数型で自動増分)、name
(テキスト型)、およびage
(整数型)の3つのカラムがあります。
3. データの挿入
テーブルにデータを挿入するには、INSERT INTO
ステートメントを使用します。以下は、ユーザー情報を挿入する例です。
python# データの挿入
cursor.execute('''
INSERT INTO users (name, age)
VALUES (?, ?)
''', ('Alice', 30))
# 変更を保存
conn.commit()
このコードでは、Alice
という名前のユーザーをage
が30歳でusers
テーブルに挿入しています。?
はプレースホルダーであり、SQLインジェクションを防ぐために使用されます。
4. データの取得
挿入したデータを取得するには、SELECT
クエリを使用します。以下は、すべてのユーザーを取得する例です。
python# ユーザー情報を取得
cursor.execute('SELECT * FROM users')
# 結果をフェッチ
rows = cursor.fetchall()
# 結果を表示
for row in rows:
print(row)
このコードでは、users
テーブルからすべてのデータを取得し、その結果を表示しています。fetchall()
メソッドは、クエリ結果のすべての行をリストとして返します。
5. データの更新
既存のデータを更新するには、UPDATE
ステートメントを使用します。例えば、Alice
さんの年齢を31歳に変更する場合は、次のようにします。
python# データの更新
cursor.execute('''
UPDATE users
SET age = ?
WHERE name = ?
''', (31, 'Alice'))
# 変更を保存
conn.commit()
このコードでは、name
がAlice
のレコードのage
を31に変更しています。
6. データの削除
レコードを削除するには、DELETE
ステートメントを使用します。以下は、Alice
という名前のユーザーを削除する例です。
python# データの削除
cursor.execute('''
DELETE FROM users WHERE name = ?
''', ('Alice',))
# 変更を保存
conn.commit()
このコードでは、name
がAlice
であるレコードを削除しています。
7. トランザクションの使用
SQLiteでは、トランザクションを使用してデータの整合性を保つことができます。トランザクションは、複数の操作を一つの単位としてまとめて実行し、すべての操作が成功した場合にのみ変更を確定します。
python# トランザクションの開始
conn.execute('BEGIN')
try:
# 複数の操作
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (26, 'Bob'))
# 変更を保存
conn.commit()
except Exception as e:
# エラーが発生した場合はロールバック
conn.rollback()
print("エラーが発生しました:", e)
このコードでは、BEGIN
でトランザクションを開始し、複数の操作を行います。操作中にエラーが発生した場合、rollback()
を使って変更を取り消すことができます。
8. データベースの切断
最後に、データベースを操作した後は必ず接続を閉じることをお勧めします。
python# 接続を閉じる
conn.close()
接続を閉じることで、リソースが解放され、データベースが正しく保存されます。
9. SQLite3を使用する際の注意点
-
スレッドの安全性: SQLiteはデフォルトではスレッドセーフではないため、複数のスレッドから同時にアクセスする際には注意が必要です。スレッドを使用する場合は、
check_same_thread=False
を接続時に指定することができます。pythonconn = sqlite3.connect('example.db', check_same_thread=False)
-
データの永続性: SQLiteは、データがファイルとして保存されるため、軽量でポータブルですが、大規模なシステムには向いていません。高い並列処理やトランザクションを必要とするアプリケーションには、よりスケーラブルなデータベースシステム(MySQL、PostgreSQLなど)を使用することを検討してください。
-
パフォーマンスの最適化: SQLiteは高速ですが、大量のデータを扱う際にはインデックスを作成することでクエリのパフォーマンスを向上させることができます。
python# インデックスの作成
cursor.execute('CREATE INDEX idx_users_name ON users(name)')
conn.commit()
まとめ
SQLite3は、Pythonで簡単にデータベース操作を行うための非常に便利なツールです。データベースの作成、データの挿入、更新、削除、検索といった基本的な操作を通じて、SQLiteを効率的に活用することができます。また、SQLiteはその軽量性と使いやすさから、小規模なアプリケーションやプロトタイプに最適な選択肢です。