【Python】SQLite3でSQL文を実行する:会員テーブルの作成と登録

sqlite3 モジュールを使用し、データベースへの「テーブル作成(CREATE)」と「データ登録(INSERT)」を行う実装です。 ここでは、Webサービスの会員情報を管理するデータベースを想定し、セキュリティを考慮したプレースホルダを使用した実装を行います。

ソースコード

import sqlite3

# データベースファイル名
db_file = "service_members.db"

# 1. データベース接続
# with文を使用することで、処理後のclose漏れを防ぎます
with sqlite3.connect(db_file) as conn:
    
    cur = conn.cursor()
    
    # --- 1. テーブルの作成 (CREATE) ---
    # 会員ID(整数), 名前(文字列), メール(文字列), ランク(文字列)
    create_sql = """
    CREATE TABLE IF NOT EXISTS members (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        email TEXT UNIQUE,
        rank TEXT
    )
    """
    cur.execute(create_sql)
    
    # --- 2. データの挿入 (INSERT) ---
    # 登録する会員データ(リスト形式)
    new_members = [
        (1001, "山田太郎", "yamada@example.com", "Gold"),
        (1002, "佐藤花子", "sato@test.co.jp", "Silver"),
        (1003, "高橋健一", "takahashi@web.net", "Bronze")
    ]
    
    # プレースホルダ (?) を使用したSQL文
    # 安全に値を埋め込むために、文字列結合ではなく必ずこれを使います
    insert_sql = "INSERT INTO members (id, name, email, rank) VALUES (?, ?, ?, ?)"
    
    # executemany でリスト内のデータを一括登録
    try:
        cur.executemany(insert_sql, new_members)
        
        # --- 3. 変更の確定 (COMMIT) ---
        # データを変更した場合は必ずコミットが必要です
        conn.commit()
        print(f"データ登録完了: {len(new_members)}件の会員を追加しました。")
        
    except sqlite3.IntegrityError as e:
        # IDやメールアドレスの重複などでエラーになった場合
        print(f"データ登録エラー: {e}")

# 実行後、カレントディレクトリに 'service_members.db' が生成されます

実行結果

データ登録完了: 3件の会員を追加しました。
目次

解説

1. CREATE TABLE IF NOT EXISTS

「もしテーブルが存在しなければ作成する」という命令です。プログラムを何度実行しても、テーブルが既にある場合はエラーにならずに無視されるため、安全に再実行できます。

2. executemany(sql, data_list)

複数のデータをループで回して execute するよりも高速に処理できます。リストやタプルでまとめたデータを一気にデータベースへ流し込む際に使用します。

3. トランザクションとコミット

conn.commit() を実行した時点で初めてファイルにデータが書き込まれます。もし executemany の途中でエラーが発生した場合、コミット前であればデータは1件も保存されないため、データの整合性が保たれます(ロールバック的な挙動)。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次