データベース(sqlite3)を利用した簡単なlinebotアプリを作る(データベース勉強編)
baku1101.hatenablog.comの記事の続きになります.
作成アプリの要件
- スタート,フィニッシュがあり,その間の時間を計る
- (スタート,フィニッシュの時間自体もあるといい)
- 計った時間を(少なくとも1ヶ月は)保存する
- 月末にその月に計った時間の合計を送る
とりあえず必要最低限はこんなものかなあ.
正直linebotで作る必要性とかデータベースを使う必要性はわからないけど,まあ勉強したいので.
ということでデータベースを使いたいけど使ったことないので,必要になりそうな領域について勉強をします.
データベースの勉強
データベースとは?
まずデータベースと一口に言っても色々あるらしいですが,今回使うのは関係データベースというもの(というか今情報系で使われるのは大体これ?)です.これは表のような構造でデータを管理し,クエリを与えてデータの検索・変更を行うデータモデルです.このモデルを用いてデータを管理するシステムが関係データベース管理システム(RDBMS)と呼ばれるものであり,これにSQLite3とかMySQLなどが該当するみたいです.(関係データベース - Wikipediaより)
SQLとは?
SQLとは,前述したRDBMSのデータ操作を行う際に用いるドメイン言語のことです.SQL文を扱う際に用いる用語には以下のようなものがあります(自分はexcelと対応させる感じで理解してます).
id | name | age |
---|---|---|
0 | taro | 20 |
1 | jiro | 15 |
2 | saburo | 10 |
- record : こちらは行に対応する.普通にrowって書いてるところもある
- field : データ一つ一つのこと.
- cursor : excelのカーソルと同じって記述もあったけど,テーブル作ったり色々できるからいまいちイメージできていない.基本的にこのカーソルを動かしてデータを取得していくイメージなのかな.
とりあえず用語はこんなところにして,実際に書いてみます.
練習用コード(datetimeを扱う)
今のところ,スタートとフィニッシュにはdatetimeを使いたいと考えています.pythonのsqlite3でdatetimeを扱う方法については沢山記事がありましたが,結局公式のリファレンス(sqlite3 --- SQLite データベースに対する DB-API 2.0 インタフェース — Python 3.7.3 ドキュメント)を参考にしました.
これを実行した時の出力は以下のとおりです.
$ python3 test.py 2019-04-02 => 2019-04-02 <class 'datetime.date'> 2019-04-02 11:12:33.914567 => 2019-04-02 11:12:33.914567 <class 'datetime.datetime'>
ちゃんとrow[0]に日付,row[1]に日付を含めた時間が入っているのがわかります.
作成したいアプリで使えそうなコードを書いてみる
結果的にはこんな感じになりました.