【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()