Python3からSQLiteを使う


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

step-by-stepで説明

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)')

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

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する。

conn.commit()

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

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

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

conn.close()

接続を閉じる。

全体ソースコード

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