プログラミング

PythonでSQLite3を使う方法

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

以下では、SQLite3を使ったデータベースの基本的な操作方法について、完全かつ包括的に説明します。

1. SQLite3の基本的な使用方法

SQLite3を使用するには、まずPythonでSQLite3モジュールをインポートする必要があります。次に、データベースに接続し、SQLクエリを実行してデータを操作することができます。

データベースの接続と作成

python
import 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()

このコードでは、nameAliceのレコードのageを31に変更しています。

6. データの削除

レコードを削除するには、DELETEステートメントを使用します。以下は、Aliceという名前のユーザーを削除する例です。

python
# データの削除 cursor.execute(''' DELETE FROM users WHERE name = ? ''', ('Alice',)) # 変更を保存 conn.commit()

このコードでは、nameAliceであるレコードを削除しています。

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を接続時に指定することができます。

    python
    conn = 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はその軽量性と使いやすさから、小規模なアプリケーションやプロトタイプに最適な選択肢です。

0 0 投票数
Article Rating
購読する
通知する
guest
0 Comments
最古
最新 最も投票された
インラインフィードバック
すべてのコメントを見る
Back to top button
0
あなたのご意見をぜひお聞かせください。コメントをお願いします。x