[Raspberry Pi] Pythonでデータベースソフト(sqlite3)を使う

Python
YOU
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を使う方法を紹介しました。

コメント

タイトルとURLをコピーしました