データベース(sqlite3)を利用した簡単なlinebotアプリを作る(データベース勉強編)

baku1101.hatenablog.comの記事の続きになります.

作成アプリの要件

  • スタート,フィニッシュがあり,その間の時間を計る
  • (スタート,フィニッシュの時間自体もあるといい)
  • 計った時間を(少なくとも1ヶ月は)保存する
  • 月末にその月に計った時間の合計を送る

とりあえず必要最低限はこんなものかなあ.
正直linebotで作る必要性とかデータベースを使う必要性はわからないけど,まあ勉強したいので.
ということでデータベースを使いたいけど使ったことないので,必要になりそうな領域について勉強をします.

データベースの勉強

データベースとは?

まずデータベースと一口に言っても色々あるらしいですが,今回使うのは関係データベースというもの(というか今情報系で使われるのは大体これ?)です.これは表のような構造でデータを管理し,クエリを与えてデータの検索・変更を行うデータモデルです.このモデルを用いてデータを管理するシステムが関係データベース管理システム(RDBMS)と呼ばれるものであり,これにSQLite3とかMySQLなどが該当するみたいです.(関係データベース - Wikipediaより)

SQLとは?

SQLとは,前述したRDBMSのデータ操作を行う際に用いるドメイン言語のことです.SQL文を扱う際に用いる用語には以下のようなものがあります(自分はexcelと対応させる感じで理解してます).

  • table : excelのsheetに対応するもの
  • column : 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]に日付を含めた時間が入っているのがわかります.

作成したいアプリで使えそうなコードを書いてみる

結果的にはこんな感じになりました.