プログラミング

シンプルに使い方を紹介

【Python】SQLiteで構文中に変数を挿入する

テストプログラム

# -*- coding:utf-8 -*-

import sqlite3

conn = sqlite3.connect("test.db")

# テーブルの作成
conn.execute("create table tbl_name(id, name)")

# データの挿入
conn.execute("insert into tbl_name values( ?, ? )", [ 1, "Sato" ])

# データの複数挿入
conn.executemany("insert into tbl_name values( ?, ? )",
               [ ( 2, "Suzuki" ), ( 3, "Tanaka" ) ])

conn.commit()
conn.close()

解説

SQLite

SQLiteではデータ挿入は、以下の書式で行われます。

INSERT INTO テーブル名 VALUES(値1, 値2, ...);

例えば、「ID、名前、年齢、住所」のようなテーブルであれば、

create table user(id integer, name text,
                              age integer, address text);
insert into user values(1, 'Sato', 18, 'Tokyo');

上記のようにデータの挿入を行います。

Python

Pythonで上記と同様の事は、以下の記述で行えます。(中に名前のようにテキストを含むものをしていするときは、「"」と「'」のどちらかを入れ子にする必要があります.同様の文字を利用するとエラーになります.)

conn.execute("create table tbl_name(id integer,name text,
                                                age integer,address text)")
conn.execute("insert into tbl_name values(1,'Sato')")

上記の記述に加えPython上では、「?」による変数の置き換えが可能です。(「[」部には勿論変数を指定可能です)

conn.execute("create table tbl_name(id integer,name text,
                                              age integer,address text)")
conn.execute("insert into tbl_name values(?,?)",[1,"Sato"])

複数の変数を挿入する場合は、以下のような記述で可能です。

conn.execute("create table tbl_name(id integer,name text,
                                               age integer,address text)")
conn.executemany("insert into tbl_name values( ?, ? )",
                                     [ ( 2, "Suzuki" ), ( 3, "Tanaka" ) ])

list = [(1,'Sato'),(2,'Suzuki'),(3,'Tanaka')]
conn.executemany("insert into tbl_name values( ?, ? )", list)

結果の確認方法

SQLite

$ sqlite3 test.db
sqlite3 > select * from tbl_name;

Python

# -*- coding:utf-8 -*-

import sqlite3

conn = sqlite3.connect("test.db")
cur = conn.cursor()

cur.execute('select * from tbl_name')

for r in cur.fetchall():
    print r[0], r[1]
    
conn.commit()
conn.close()
cur.close()