注目キーワード

【Python】SQLite(sqlite3)INSERT文のサンプルソース

こんにちは、Tamagoです。

今回はSQLite(sqlite3)のINSERT処理について説明していきたいと思います。

具体的に言うと、テーブルへの1行挿入と複数行の挿入について、サンプルソースを使いながら説明していきたいと思います。

対象レベル

Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。

詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。

サンプルソースを読むうえで理解しておきたいこと

基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。

TABLEのイメージ

今回使う『TEST』テーブルは以下のようにinteger型の『id』とtext型の『name』の2カラムを持つテーブルを使います。

idname
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件挿入されています。

スポンサーリンク

sample_sqlite_insert_1.py 実行結果

複数のデータを渡すと実行エラーが出ます

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()
sample_sqlite_insert_1_error.py 実行結果
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()
sample_sqlite_insert_2.py 実行結果