SQLiteの基本から応用まで、実践的なコード例とパフォーマンス最適化のテクニックを解説します。初心者でも理解できる形で、高度な使い方まで網羅していますが、あなたのプロジェクトに最適な使い方とは?
sqlite3でデータベース構築とパフォーマンス最適化の実践ガイド
SQLiteの基礎から高度な実装まで、実践的なコード例を交えて解説します。データベースの構築からパフォーマンスチューニングまで、本当に使える情報とは?
まずはPythonでSQLiteを使用する基本的な例を見てみましょう。以下のコードはデータベースの作成から基本的なCRUD操作までを示しています。
import sqlite3
# データベースに接続
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# テーブル作成
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
''')
# データの挿入
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)",
("田中太郎", "tanaka@example.com"))
# 変更をコミット
conn.commit()
Write-Ahead Logging(WAL)モードを有効にすることで、データベースのパフォーマンスを大幅に向上させることができます。
# WALモードの有効化
cursor.execute('PRAGMA journal_mode=WAL')
cursor.execute('PRAGMA synchronous=NORMAL')
このような設定により、トランザクションのオーバーヘッドを30ミリ秒以上から1ミリ秒未満に削減することが可能です。
セキュリティ面での重要なポイントをいくつか紹介します:
# プリペアドステートメントの例
stmt = cursor.prepare("SELECT * FROM users WHERE id = ?")
result = stmt.execute((user_id,))
SQLiteでは独自の関数を作成することができ、これによりデータベース操作の柔軟性が大きく向上します。
def custom_hash(text)
return hashlib.md5(text.encode()).hexdigest()
# カスタム関数の登録
conn.create_function("md5_hash", 1, custom_hash)
# カスタム関数の使用
cursor.execute("SELECT md5_hash(name) FROM users")
データベースの運用において注意すべき点:
# データベースの最適化
cursor.execute("VACUUM")
# インデックスの作成
cursor.execute("CREATE INDEX IF NOT EXISTS idx_user_email ON users(email)")