SQLiteは非常にお手軽なデータベースです.
軽量でありながらデータベースの操作言語SQLを利用して本格的なデータベース操作が行えるという点に注目が集まっています.
ファイル1つが1つのデータベースであり,組み込み用途でよく利用されています.
Pythonから使う場合,標準ライブラリのsqlite3を利用する宣言だけで使うことができるのもメリット.
例)shuto.sqliteというデータベースに,リンゴやバナナの値段を挿入し,それを抽出する.
import sqlite3
# sqliteのデータベースに接続
dbpath = "shuto.sqlite"
conn = sqlite3.connect(dbpath)
# テーブルを作成し、データを挿入する
cur = conn.cursor()
cur.executescript("""
/* itemsテーブルが既にあれば削除する */
DROP TABLE IF EXISTS items;
/* テーブルの作成 */
CREATE TABLE items(
item_id INTEGER PRIMARY KEY,
name TEXT UNIQUE,
price INTEGER
);
/* データを挿入 */
INSERT INTO items(name, price)VALUES('Apple', 800);
INSERT INTO items(name, price)VALUES('Orange', 780);
INSERT INTO items(name, price)VALUES('Banana', 430);
""")
# データベースに反映させる
conn.commit()
# データを抽出する
cur = conn.cursor()
cur.execute("SELECT item_id,name,price FROM items")
item_list = cur.fetchall()
# 一行ずつ表示
for it in item_list:
print(it)
(1, 'Apple', 800)
(2, 'Orange', 780)
(3, 'Banana', 430)
import sqlite3
# データベースに接続
filepath = "test2.sqlite"
conn = sqlite3.connect(filepath)
# テーブルを作成
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS items")
cur.execute(""" CREATE TABLE items (
item_id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER)""")
conn.commit()
# 単発でデータを挿入
cur = conn.cursor()
cur.execute(
"INSERT INTO items (name,price) VALUES (?,?)",
("Orange", 520))
conn.commit()
# 連続でデータを挿入
cur = conn.cursor()
data = [("Mango",770), ("Kiwi",400), ("Grape",800),
("Peach",940),("Persimmon",700),("Banana", 400)]
cur.executemany(
"INSERT INTO items(name,price) VALUES (?,?)",
data)
conn.commit()
# 400-700円のデータを抽出して表示
cur = conn.cursor()
price_range = (400, 700)
cur.execute(
"SELECT * FROM items WHERE price>=? AND price<=?",
price_range)
fr_list = cur.fetchall()
for fr in fr_list:
print(fr)
(1, 'Orange', 520)
(3, 'Kiwi', 400)
(6, 'Persimmon', 700)
(7, 'Banana', 400)
ここで注目したいのは,SQL内で実際に挿入する値を「?」を使って表現します.そしてexecute()メソッドの第二引数で実際の値を指定します.すると「?」の部分が値に置換されます.
この仕組みを使えば,セキュリティの脅威を防ぐことができるだけでなく,意図しないSQLの破壊を防ぐことができます.
