Pythonで複数行データを一括挿入する方法を完全解説!executemanyの使い方を初心者向けに解説
生徒
「Pythonでデータベースにたくさんのデータを入れたいとき、1件ずつINSERTしないとダメなんですか?」
先生
「1件ずつでもできますが、とても時間がかかります。そんなときに使うのがexecutemanyです。」
生徒
「名前からして難しそうですが、初心者でも使えますか?」
先生
「大丈夫です。まとめて渡すだけなので、むしろ考え方はシンプルですよ。」
1. 複数行データを一括挿入するとは
複数行データの一括挿入とは、たくさんのデータをまとめてデータベースに保存する方法です。例えば、名簿や商品一覧のように、同じ形式のデータを何件も登録したい場面で使われます。1件ずつ保存するよりも速く、プログラムもすっきりします。
2. 1件ずつINSERTする場合の問題点
INSERT文を何度も実行すると、そのたびにデータベースとやり取りが発生します。これは郵便物を1通ずつ運ぶようなもので、数が増えるほど時間がかかります。大量のデータを扱うと、処理が遅くなり、実用的でなくなることがあります。
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("山田", 20))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("佐藤", 22))
3. executemanyとは何か
executemanyは、同じSQL文を複数のデータに対してまとめて実行するための仕組みです。SQLの形は1つだけ用意し、そこに複数行分の値を一気に渡します。これにより、処理速度が向上し、コードも読みやすくなります。
4. executemanyの基本的な使い方
executemanyでは、プレースホルダー付きのSQL文と、値の集合を渡します。値の集合は、タプルを複数まとめたリストです。
import sqlite3
conn = sqlite3.connect("sample.db")
cursor = conn.cursor()
data = [
("山田", 20),
("佐藤", 22),
("鈴木", 25)
]
cursor.executemany(
"INSERT INTO users (name, age) VALUES (?, ?)",
data
)
conn.commit()
5. データ構造とプレースホルダーの関係
executemanyでは、SQL文の「?」の数と、1行分のデータの数を一致させる必要があります。例えば「名前」と「年齢」を入れる場合は、2つの値を持つタプルを用意します。これがズレるとエラーになります。
6. トランザクションと組み合わせた安全な挿入
一括挿入では、途中で失敗すると困るため、まとめてcommitするのが基本です。すべて成功したら確定し、問題があれば取り消します。
try:
cursor.executemany(
"INSERT INTO users (name, age) VALUES (?, ?)",
data
)
conn.commit()
except:
conn.rollback()
7. よくあるミスと注意点
初心者がよく間違えるのは、データをリストではなく単一のタプルで渡してしまうことです。executemanyは「複数行」を前提にしているため、必ず複数のタプルをまとめた形にします。また、commitを忘れるとデータは保存されません。
8. executemanyが活躍する場面
CSVファイルの内容をまとめて保存したり、初期データを一気に登録したりする場面でexecutemanyは力を発揮します。大量データを効率よく扱えるため、PythonでのSQLデータベース操作では欠かせない基本技術です。