自由きままに楽しまないとね

こんなこと知ってますか?という幅広い雑記ブログ

餌やりを自動化【サーバー構築編】#3 DB構築

今回の内容

WindowsSQLiteをインストールしDataBaseを構築する

SQLite

f:id:mstmy:20191216204425p:plain

DB Browser for SQLiteをインストール

コマンドから実行してもよいのですが、「DB Browser for SQLite」というツールを使用してSQLiteを操作・管理したいと思います。

以下のURLからWindows版64ビット用をダウンロード、インストール
https://sqlitebrowser.org/dl/

起動画面

f:id:mstmy:20191216203530p:plain

起動画面の「New Database」をクリックしてDBファイルを作成
自動的にテーブル作成画面が表示されるので下記のように適当に作成

f:id:mstmy:20191220224959p:plain

作成したテーブルが表示されます。

f:id:mstmy:20191220225932p:plain

作成したデータベースは一旦「Close Database」をクリックして閉じておきます。
※その時に「Save」ボタンをクリックして保存しておいてください。

Pythonプログラムの修正

SQLiteに保存できるようにPythonプログラムを修正します。

from flask import Flask, jsonify, request
from datetime import datetime
import math
import sqlite3

api = Flask(__name__)

@api.route('/get', methods=['GET'])
def get_request():
    chipid = request.args.get('chipid')
    updateChipInfo(chipid)
    output = {
        "chip_id": chipid,
        "unix_time": math.floor(datetime.now().timestamp())
    }

    return jsonify(output)

def updateChipInfo(chipid):

    dbpath = 'database.sqlite'
    
    connection = sqlite3.connect(dbpath)
    cursor = connection.cursor()
    
    try:
        cursor.execute("SELECT ID FROM CHIP_INFO WHERE CHIP_ID=?", (chipid,))
        record = cursor.fetchall()
        if len(record)==0:
            cursor.execute("INSERT INTO CHIP_INFO VALUES (?, ?, ?)", (1, chipid, 'HogeCreate'))
        else:
            cursor.execute("UPDATE CHIP_INFO SET NAME=? WHERE CHIP_ID=?", ('HogeUpdate', chipid))
    except sqlite3.Error as e:
        print('sqlite3.Error occurred:', e.args[0])
    
    connection.commit()
    connection.close()

if __name__ == "__main__":
    api.run()

既にPythonプログラムが起動している場合はVisual Studio CodeのTERMINALにて「Ctrl + C」で停止して、再度起動し直してください。

動作確認

ブラウザにて以下のURLにアクセスしてください

http://localhost/get?chipid=XXX000

前回と同じような結果が表示されます。

{"chip_id":"XXX000","unix_time":1575778996}

DB Browserで確認すると新しいレコードが作成されていると思います。
※再度ブラウザにて同じURLにアクセスすると更新されることが確認できます。

次回

サーバー構築は一通り完了しましたので、自動給餌機を作成していきたいと思います。