注目キーワード

【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 実行結果
最新情報をチェックしよう!