LoginSignup
4
6

【Python】SQLiteによるデータベースの操作

Last updated at Posted at 2021-02-21

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の破壊を防ぐことができます.

snakes.png

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6