おはようございます。じぇいかわさきです。
Python3でデータベースに接続して、データを取り出すことまでできるようになった。
次は、データを登録することに挑戦していようと思う。

まずは評価用テーブルを作成
それでは、MariaDBを起動させ、ユーザーraspでログインをする。
その後、テータベースiotdataへ移動し、その中に新たに一つテーブルを作成する。
今回は、test_sampleというテーブルを作成した。

出来上がったテーブルに対して、中が空であることを確認してみる。こっから先は、Thonnyを用いて確認していく。

結果が[]と表示されて、中身が空である事が証明できた。
いよいよデータ登録に挑戦だ
それでは、データを登録することをやってみよう。
まず必要なのは、Datetimeをプライマリーキーとして使用するので、Datetimeを扱えるようにライブラリーをインポートする。
Datetimeを自動で取得させようとしたが、どうもうまく行かない。
とりあえず、マニュアルで日時、温度、湿度を決めて書き込み実験をしてみた。

とりあえずは一旦書き込みは成功したようなんですね。
しかし、実際にはいろいろと試行錯誤したので、余分なデータが入ったりしたので、一旦テーブルを削除して新規にやってみた結果が、うまく言ったということなんです。
実際に、ターミナルで確認してみた。

[ads]
ちゃんとデータが入っていることがわかる。
とりあえず、マニュアルで設定した値は、なんとかINSERT文を使用することにより、テーブルに書き込むことはできた。
しかし、問題は自動でデータを取得した場合、本当に入るか?という課題はある。特に、日時が自動で取得できなければ、温湿度も同じように取得できないということになるので。
今回、実験してみて分かったことがある。
それは、Python3もちゃんと理解できていない、更にMariaDBのSQL文も十分に理解できていない。
両方とも中途半端な状態で色々と実験しても、何が正しいのか、どこが悪いのか、さっぱりわからない。
文法エラーが出ても、実際にはどこが間違っているのか、ハッキリ言って解決するのにかなり時間を要している。
このままでは、虻蜂取らずで共倒れになりそうな気配がしなくもない。
ひたすらネットで調べまくった
時間を自動で入力する方法を、ネットを使ってひたすら調べまくった。
最初に見つけたのは、datetime.now()で現在の時間を取得できるということ。
これを使ってこんな文を考えてみた。
dt_now = datetime.datetime.now()
dt = dt_now.strftime(‘%Y-%m-%d %H:%M:%S’)
そして、dtをVALUESの中に入れてみたのだが、現在の時間が入らなかった。
さんざん調べていくと、こんなに難しい事はしなくてももっと簡単なことで取得できることが分かった。
実際に、現在の時間を取得するにはnow()だけで良いようなのだ。
cur.execute(“INSERT INTO test_sample (date, temp, humd) VALUES (now(), ‘27.6’, ‘67.8’)”)
こんな簡単なことで解決した。

この状態で3回実行してみる。

きれいにデータが書き込まれていくではないですか。

温度、湿度は固定値なので変化しないが、時間は秒単位で変化しているのがわかる。
秒単位で変わっていくので、重複することは絶対にないね。
あとはラズパイに移植して、cronで動かした時に本当にデータの取得ができるかの確認をする必要があるね。
まとめ
今回、今まで実施してきた内容の復習も兼ねて、データベースへの登録という作業を行ってみた。
残念なことに、入っているデータを読み出すよりも、遥かに難しい事が分かった。何が難しいかと言えば、そもそもPython3にしても、MariaDBにしても文法自体の理解度が不足しすぎている。
まるで、少々知っている単語を駆使して、片言英語を喋っているようなものである。相手(マシン)が言ってくる内容が理解できない、と言う状態。
ハッキリ言って、Python3をもう少し学んでからでないと、SQL文を操作すること自体が難しいように感じる。
世の中、急がば回れと言うことわざがある通り、ここはじっくりとPythonの基礎を学んだほうが良いのかもしれない。そういう思いに駆られた。
なんだか恥ずかしくも情けない話だか、この歳でプログラミングを始めても、理解度がなかなか上がっていかないのが致命的だね。
でも、基礎ができていなければダメだと言うことに、自分なりに気がついたことを褒めて、ちょっと基礎を勉強していこうかと思っている。
少し遠回りになるかもしれないが、地道に進んでいこう。
[twt]
