おはようございます。じぇいかわさきです。
この前、Python3からデータベースを操作するための準備として、モジュールやライブラリーをインストールした。
これでPython3からデータベースを操作するための準備は完了しているとおもわれるので、実際にPython3でプログラムを作成し、本当にデータベースの操作ができるかを確認した。
今回も、Python3自体をまだ十分理解できていないので、手探り状態からの作業となった。

プログラムを考えてみる
さて、実際にPython3で今回作成したMariaDBへ接続するためにどうしたらいいのだろうか?
前回インストールしたpymysqlと言うモジュールを使用すると、MySQLdbとほぼ互換で使用できるらしことまで分かっているので、pymysqlを使用して接続するプログラムを作ってみる。
作ってみると言っても、もともと何も知らないので、またネットでいろいろと調べなければいけないのですがね。
まず調べていくと、最初にモジュールを読み込まないと、データベースへの接続ができないので、まずはインストールしたpymysqlをモジュールとしてインポートする。
import pymysql.cursors
この文を最初に記述することにより、pymysqlをインポートし使用できるようにする。
しかし、何故cursorsを使用するのか分からなかったので、調べてみると以下のページが詳しく書かれていた。
でも、結果的に今の段階では深く考えずに、まずは使えるようにすることがベストと自分では判断した。
従って、未だにcursorsについては深く理解できていない。
それはさておき、データベースに接続するためには、まず最初にデータベースに接続するためのSQL文を書かなければいけない。
conn = pymysql.connect (host = ‘localhost’, user = ‘rasp’, password = ‘****’, db = ‘iotdata’, charaset = ‘utf8’, cursorclass = pymysql.cursors.DisctCursor)
ネットで見つけたサンプルを自分の環境に合わせて変更してみた。最初のconnectの部分は理解できるが、最後のcursorsの部分が未だ理解できていない。
まあ呪文のようなものだと、今は理解している。
次に、今までに作成し登録済みのデータをまずは呼びだしてみたいと思う。
データを読み出すためには、SQL文のselectを使用するのは分かっているので、それをどのように記述するかだと思う。
ここでもcursorsが使用されるが、とりあえず真似をしてみる。
[ads]
SQL文は分かるが、それ以外の部分で何となくわかるのは
sursor.execute(sql)と言う部分で、SQL文を実装しているのではないかと推測できる。
そして、その実行結果を引き取るのが、result = cursor.fetcall()と言う部分。
これはexecute(sql)で実行した内容を、fecthallで引き取っているのだと思う。
そして、最後がresultの内容を表示するprint文だ。
最後に、接続したデータベースを切断して終了するclose。

論理的にいけば、特にこの内容で問題なくテーブルのデータをすべて取り出せるはず。
実査にこのプログラムを動作させてみた。

結果は、見事にデータベース内のあるテーブルのデータをすべて読みだしてくれている。
しかも、1行ごとの内容としては、データの前にdateやtemp,humdと言うデータ名称まで付加されている。
今回、print文で改行を追加していないため、全データが連続して表示されてしまった。改行を使いすればもっと見やすくなるだろう。
まとめ
初めてPython3でデータベースに接続することに調整したが、見事に接続しデータを取り出すことができるようになった。
これから挑戦していく内容としては
- cronで実行した内容を、テーブルに書き込めるようにする
- 登録したデータを読み出し、Webページとして表示する
- 登録したデータからグラフを作成し、Webページで表示する
などと、まだまだやるべきことがたくさんある。まずは、cronで採取するデータを自動でテーブルに書き込めるようにすることが最初にやるべき内容。
そうすれば、とりあえずはデータを自動で採取しデータベースに蓄積することだけは自動でできるようになるので、そこが最初の完了点だろう。
次に、Webサーバーを立ち上げて、データベースに入っているデータを可視化するのが次のステップになると思う。
まずはデータの自動記録が最優先項目だ。
その前に、もう少しPythonについて学んでいかないと、いちいちネットに頼っていると、バージョン違いから適切でなく、時間をロスする事が多くなる。
最低限、コマンドの意味位は理解するようにしたいと思う。
また学ぶことが増えた。そろそろ年齢的な問題もあり、メモリがオーバーキャパになりそうだ。
[twt]
