こんにちは、Tamagoです。
今回はSQLite(sqlite3)のINSERT処理について説明していきたいと思います。
具体的に言うと、テーブルへの1行挿入と複数行の挿入について、サンプルソースを使いながら説明していきたいと思います。
対象レベル
Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。
詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。
サンプルソースを読むうえで理解しておきたいこと
基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。
TABLEのイメージ
今回使う『TEST』テーブルは以下のようにinteger型の『id』とtext型の『name』の2カラムを持つテーブルを使います。
id | name |
1 | 猫 |
1行INSERT(execute)
それでは、初めに1行のデータを挿入するサンプルプログラムを紹介していきます。
import sqlite3
def select_data(): con = sqlite3.connect('./sample.db') cur = con.cursor() cur.execute("CREATE TABLE IF NOT EXISTS TEST(id integer,name text)") cur.execute("SELECT * FROM TEST") for row in cur: print(str(row[0]) + "," + str(row[1])) con.close()
def insert_data(): con = sqlite3.connect('./sample.db') cur = con.cursor() sql = 'INSERT INTO TEST (id, name) values (?,?)' data = [1, '猫'] cur.execute(sql, data) con.commit() con.close()
print("INSERT前")select_data()# INSERT 処理insert_data()print("INSERT後")select_data()
実行結果は以下のようになっており、INSERT前では1件もデータがなかったのに、INSERT後にデータが1件挿入されています。
スポンサーリンク

複数のデータを渡すと実行エラーが出ます
def insert_data(): con = sqlite3.connect('./sample.db') cur = con.cursor() sql = 'INSERT INTO TEST (id, name) values (?,?)' data = [(1, '猫'),(2, '蛇'),(3, 'イルカ'),(4, 'パンダ'),(5, 'コアラ')] cur.execute(sql, data) con.commit() con.close()

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 5 supplied.
複数行INSERT(executemany)
def insert_data(): con = sqlite3.connect('./sample.db') cur = con.cursor() sql = 'INSERT INTO TEST (id, name) values (?,?)' data = [(1, '猫'),(2, '蛇'),(3, 'イルカ'),(4, 'パンダ'),(5, 'コアラ')] cur.executemany(sql, data) con.commit() con.close()
