INSERT INTO SELECTステートメントでデータをコピーする
SQLite に複数の行を挿入する方法
INSERT ステートメントを使う
方法
- INSERT ステートメントを使って、挿入する列と値を指定します。
- VALUES キーワードを使って、挿入する行のデータのリストを指定します。
- 複数の行を挿入するには、VALUES キーワードの後に複数のデータのリストをカンマで区切って指定します。
例
-- テーブルを作成
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
);
-- 複数の行を挿入
INSERT INTO users (name, email)
VALUES ("John Doe", "[email protected]"),
("Jane Doe", "[email protected]"),
("Peter Smith", "[email protected]");
実行結果
3 rows affected
解説
INSERT INTO
ステートメントは、データを追加したいテーブルを指定します。(name, email)
は、挿入する列を指定します。("John Doe", "[email protected]")
は、挿入する行のデータを表すタプルです。- カンマは、複数の行を区切るために使用されます。
executemany() メソッドを使う
sqlite3
モジュールのexecutemany()
メソッドを使って、複数の行を挿入するクエリを実行できます。executemany()
メソッドは、クエリとデータのリストを受け取ります。
import sqlite3
# データベースに接続
connection = sqlite3.connect("database.sqlite3")
# クエリとデータのリストを作成
query = """
INSERT INTO users (name, email)
VALUES (?, ?)
"""
data = [
("John Doe", "[email protected]"),
("Jane Doe", "[email protected]"),
("Peter Smith", "[email protected]"),
]
# クエリを実行
cursor = connection.cursor()
cursor.executemany(query, data)
connection.commit()
# 接続を閉じる
connection.close()
3 rows affected
data
は、挿入する行のデータを表すタプルのリストです。cursor.executemany(query, data)
は、クエリを実行し、データのリストを挿入します。
SQLite に複数の行を挿入するには、いくつかの方法があります。
- INSERT ステートメントを使う
executemany()
メソッドを使う
INSERT ステートメントを使う
-- テーブルを作成
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
);
-- 複数の行を挿入
INSERT INTO users (name, email)
VALUES ("John Doe", "[email protected]"),
("Jane Doe", "[email protected]"),
("Peter Smith", "[email protected]");
executemany() メソッドを使う
import sqlite3
# データベースに接続
connection = sqlite3.connect("database.sqlite3")
# クエリとデータのリストを作成
query = """
INSERT INTO users (name, email)
VALUES (?, ?)
"""
data = [
("John Doe", "[email protected]"),
("Jane Doe", "[email protected]"),
("Peter Smith", "[email protected]"),
]
# クエリを実行
cursor = connection.cursor()
cursor.executemany(query, data)
connection.commit()
# 接続を閉じる
connection.close()
他の方法
CSV ファイルを使う
- データを CSV ファイルに保存します。
LOAD DATA INFILE
ステートメントを使って、CSV ファイルを SQLite テーブルにインポートします。
-- CSV ファイルを作成
-- name,email
-- John Doe,[email protected]
-- Jane Doe,[email protected]
-- Peter Smith,[email protected]
-- CSV ファイルをインポート
LOAD DATA INFILE 'data.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
3 rows affected
FIELDS TERMINATED BY ','
は、CSV ファイルのフィールド区切り文字を指定します。IGNORE 1 LINES
は、CSV ファイルの最初の行をスキップします。
INSERT INTO SELECT ステートメントを使う
INSERT INTO SELECT
ステートメントを使って、別のテーブルからデータをコピーできます。
-- テーブルを作成
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
);
-- テストテーブルを作成
CREATE TABLE IF NOT EXISTS temp_users (
name TEXT,
email TEXT
);
-- テストデータ挿入
INSERT INTO temp_users (name, email)
VALUES ("John Doe", "[email protected]"),
("Jane Doe", "[email protected]"),
("Peter Smith", "[email protected]");
-- temp_users から users テーブルへデータをコピー
INSERT INTO users (name, email)
SELECT name, email
FROM temp_users;
-- テストテーブルを削除
DROP TABLE temp_users;
3 rows affected
SELECT
ステートメントは、コピーするデータの列を指定します。
- CSV ファイルを使う
INSERT INTO SELECT
ステートメントを使う
sql database sqlite