Contents

Python3からSQLiteを使う

Contents

Python 3にはSQLiteを扱うためのモジュールが付属している。 サンプルコードを書いたのでメモ。

step-by-stepで説明

1
2
dbname = "test.db"
conn = sqlite3.connect(dbname)

データベースへ接続する。

1
cur = conn.cursor()

データベースを操作するカーソルオブジェクトを取得。

1
2
cur.execute('DROP TABLE IF EXISTS sample')
cur.execute('CREATE TABLE IF NOT EXISTS sample (sensor1 real, sensor2 real, sensor3 real)')

カーソルオブジェクトに対して.execute()メソッドでSQL文を実行する。 テーブルsampleが存在していれば、削除する。 新たなテーブルsampleを作成する。

1
2
3
4
5
for i in range(24*60*60):
    sensor1 = np.random.normal()
    sensor2 = np.random.normal()
    sensor3 = np.random.normal()
    cur.execute('INSERT INTO sample VALUES(?, ?, ?)', (sensor1, sensor2, sensor3))

NumPyで3つのランダムな実数を生成し、テーブルへレコードをINSERTする。

1
conn.commit()

データベースへコミットし、変更を反映させる。

1
2
3
cur.execute('SELECT * FROM sample')
for i in range(5):
    print(cur.fetchone())

テーブルsampleからレコードを取得し、5件表示する。

1
conn.close()

接続を閉じる。

全体ソースコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
import sqlite3

np.random.seed(seed=0)

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

cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS sample')
cur.execute('CREATE TABLE IF NOT EXISTS sample (sensor1 real, sensor2 real, sensor3 real)')

for i in range(24*60*60):
    sensor1 = np.random.normal()
    sensor2 = np.random.normal()
    sensor3 = np.random.normal()
    cur.execute('INSERT INTO sample VALUES(?, ?, ?)', (sensor1, sensor2, sensor3))

conn.commit()

cur.execute('SELECT * FROM sample')
for i in range(5):
    print(cur.fetchone())

conn.close()