YOU
ラズパイで、センサー情報を取得したあと、どうやってデータ管理したらいいのかな。エクセルファイルやテキストファイルに書き込むのかな。
けんろう
データ管理には、データベースソフトを使うといいよ。
データベースソフトを使うと、後からデータを並び替えたり、条件に合うデータだけを取り出したりとデータ解析に必要なことが簡単にできるよ。
ラズパイで使えるデータベースソフトはいろいろあるけど、
今回は、sqlite3というソフトを紹介します。
今回は、ラズパイで、sqlite3というデータベースソフトをpythonで使う方法を紹介します。
今回作成するアプリ
・sample_db.sqliteというデータベースファイルを作成
・”id、name”というデータを持つmytableというテーブルを作成
・このテーブルに、データを挿入
・このデータベースファイルを読み込んで、そこに入っているデータを読み出す
構成
今回は、ラズパイのみです。
プログラム言語は、python3です。
\ キーボード一体型のラズパイがおすすめです。モニターとつなげるだけです /
リンク
準備
sqlite3をラズパイにインストールします。
$ sudo apt install sqlite3 -y
サンプルコード
データベース作成して、データを挿入する
#!usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3
# データベースファイルのパス
# 慣例的に拡張子に、”.sqlite”をつけるらしい。
dbpath = 'sample_db.sqlite'
# データベース接続とカーソル生成
# dppathと同名のファイルがなければ、DBファイルが作成されます。
connection = sqlite3.connect(dbpath)
# 自動コミットにする場合は下記を指定(コメントアウトを解除のこと)
# connection.isolation_level = None
cursor = connection.cursor()
try:
# CREATE(「id、name」のテーブルを作成)
cursor.execute("CREATE TABLE IF NOT EXISTS mytable (id INTEGER, name TEXT)")
# INSERT
cursor.execute("INSERT INTO mytable VALUES(1, '佐藤')")
cursor.execute("INSERT INTO mytable (id, name) VALUES (?,?)",(2,'加藤'))
# パラメータが1つの場合には最後に , がないとエラー。('鈴木') ではなく ('鈴木',)
cursor.execute("INSERT INTO mytable VALUES (3, ?)", ('鈴木',))
cursor.execute("INSERT INTO mytable VALUES (?, ?)", (4, '高橋'))
cursor.execute("INSERT INTO mytable VALUES (:id, :name)",{'id': 5, 'name': '田中'})
# 複数レコードを一度に挿入 executemany メソッドを使用
persons = [
(6, '伊藤'),
(7, '渡辺'),
]
cursor.executemany("INSERT INTO mytable VALUES (?, ?)", persons)
# わざと主キー重複エラーを起こして例外を発生させてみる
# cursor.execute("INSERT INTO mytable VALUES (1, '佐藤')")
except sqlite3.Error as e:
print('sqlite3.Error occurred:', e.args[0])
# 保存を実行(忘れると保存されないので注意)
connection.commit()
# 接続を閉じる
connection.close()
先程作成したデータベースを読み出す
import sqlite3
dbname = 'sample_db.sqlite'
conn = sqlite3.connect(dbname)
cur = conn.cursor()
# terminalで実行したSQL文と同じようにexecute()に書く
cur.execute('SELECT * FROM mytable')
# 中身を全て取得するfetchall()を使って、printする。
print(cur.fetchall())
# for文で1つずつ表示する
cur = conn.cursor()
cur.execute("SELECT id, name FROM mytable")
list = cur.fetchall()
for i in list:
print(i)
cur.close()
conn.close()
動かし方
まずは、create.pyを動かし、データベースを作成し、データを書き込みます。
$ python3 create_db.py
次に、read_db.pyを動かして、先ほど作成したデータベースを読み出します。
$ python3 read_db.py
読み出した結果は、以下となります。
[(1, '佐藤'), (2, '加藤'), (3, '鈴木'), (4, '高橋'), (5, '田中'), (6, '伊藤'), (7, '渡辺')]
(1, '佐藤')
(2, '加藤')
(3, '鈴木')
(4, '高橋')
(5, '田中')
(6, '伊藤')
(7, '渡辺')
まとめ
今回は、ラズパイで、データベースソフトであるsqlite3を使う方法を紹介しました。
\ キーボード一体型のラズパイがおすすめです。モニターとつなげるだけです /
リンク
リンク
コメント