ホームページをリニューアルしました。旧HPはこちら
ソフト・ハードウェア Python

PHP・MySQL・canvasJSを使った動的なチャート生成(その4)

4、 Pythonを使ったMySQLへのアクセスとクエリ設定

PHPだけでなくPythonからMySQLにアクセスしてクエリデータが取り込めれば、データ加工がやりやすい。そこでMySQL-Pythonの学習をした。

Python3でMySQLに接続するドライバーにはPython2系から使われている「mysqlclient」と、Oracleが提供する「mysql-connetor-python」がある。ネット記事では後者を使った例が多いので、インストールして使用したところ、
「segamentation fault(コアダンプ)」
というエラーが出て動作しない。ネット記事を見るとubuntu18.04のPython3との相性が悪くバグがあるようだ。

そこで「mysqlclient Python3でMySQLに接続する」という記事を参考に、MySQLクエリの実行プログラムを作成した。

・libraryのInstall方法 //https://github.com/PyMySQL/mysqlclient

Linux
You may need to install the Python 3 and MySQL development headers and libraries like so:
はじめに下記のモジュールを入れておく。
$ sudo apt-get install python3-dev default-libmysqlclient-dev build-essential # Debian / Ubuntu

Then you can install mysqlclient via pip now:
その後、mysqlclientをインストールする。
$ pip install mysqlclient

・接続 & select実行プログラム

前回のPHPと同様、データベースclimateのテーブルiida_agri_sensorから気象データを抽出する。

#mysqlclientライブラリのインポート
import MySQLdb   

# データベースへの接続とカーソルの生成
connection = MySQLdb.connect(
host='localhost',
port=3306,
user='miyasan',
passwd='*******',
db='climate',

)
cursor = connection.cursor()
yymm = ['2020-10-04', '2020-10-05']
date1=yymm[0]
date2=yymm[1]

cursor.execute("""SELECT * FROM iida_agri_sensor WHERE date BETWEEN %s AND %s LIMIT 10""",(date1,date2))
results = cursor.fetchall()

たったこれだけでMySQLのデータを抽出できる。PHPに比べて簡単でわかりやすい感じ。
cursorで読み込まれたresultsのデータは配列に格納されている。(ipython3での確認結果)

In [40]: results[0]
Out[40]:
(datetime.datetime(2020, 10, 4, 0, 0, 17),
18.1,
89.3,
961.5,
18.81,
20.56,
657.0,
496.0,
0.0)

コンソールにデータを表示する場合:

for row in cursor:
print(row)

表示結果:
(datetime.datetime(2020, 10, 4, 0, 0, 17), 18.1, 89.3, 961.5, 18.81, 20.56, 657.0, 496.0, 0.0)
(datetime.datetime(2020, 10, 4, 0, 1, 21), 18.1, 88.7, 961.4, 18.81, 20.56, 657.0, 495.0, 0.0)
(datetime.datetime(2020, 10, 4, 0, 2, 25), 18.1, 89.2, 961.5, 18.81, 20.62, 658.0, 489.0, 0.0)
..........

ファイルに保存する場合:

with open('print.csv', 'w') as f:
for row in cursor:
print(*row, sep=',', file=f)

# 接続を閉じる
connection.close()

・コマンドラインからの引数の受取
プログラムにsysライブラリを入れて、引数をつけて以下のようにコマンド入力すればOK
python3 python-sql-argu.py  2020-10-04  2020-10-5

#python-sql-argu.py

import sys
import MySQLdb
 
# データベースへの接続とカーソルの生成
connection = MySQLdb.connect(
    host='localhost',
    port=3306,
    user='miyasan',
    passwd='*********',
    db='climate',
)
cursor = connection.cursor()
# コマンドライン引数の受取
args = sys.argv
date1=args[1]  #startdate argument
date2=args[2]  #enddate argument
cursor.execute("""SELECT * FROM iida_agri_sensor WHERE date BETWEEN %s AND %s LIMIT 10""",(date1,date2))
results = cursor.fetchall()
# SQL内でパラメータにしたい箇所は%sにし、第2引数にパラメータをタプルで指定する。
with open('print.csv', 'w') as f:
    for row in cursor:
        print(*row, sep=',', file=f)
# 接続を閉じる
connection.close()

今回の学習はPHPが主体なので、PythonとMySQLの接続の基本のみ触れてみたが、PHPに比べてわかりやすい印象を受けた。

 

PHP・MySQL・canvasJSを使った動的なチャート生成 関連記事

1、 ローカルサーバの開発環境の設定

2、 MySQLに気象観測データベースを作成

3、 PHPを使ったMySQLへのアクセスとクエリ設定

4、 Pythonを使ったMySQLへのアクセスとクエリ設定

5、 フォームからの送信データ取得と表示・ファイル保存

6、 MySQLデータを用いcanvasによるチャート作成

 

コメント

タイトルとURLをコピーしました