Raspberry PiをSQLサーバーにして、Python3からMySQLのデータを検索して表示させるまで

#はじめに
備忘録として書いてみます。

# 必要なパッケージを導入する

### Apache2のインストール

```
$ sudo apt install apache2
```

IPアドレスを確認

```
$ ifconfig
```

IPアドレスにアクセスできればインストールできています。

### phpのインストール

```
$ sudo apt update
$ sudo apt install php
```

phpが動くか確認するために、phpinfo.phpを作成して、IPアドレス/phpinfo.phpにアクセス。

```
$ cd /var/www/html/
$ sudo nano phpinfo.php
```

```php:phpinfo.php
<?php
	phpinfo();
>
```

### mariadb-serverのインストール

```
$ sudo apt install mariadb-server
$ sudo mysql
```

[ローカル環境のMariaDBにユーザ作成と権限を付与する時 - Qiita](https://qiita.com/akihira207/items/d11306757e77ac45eead)を参考にして、ユーザを作成して権限を与える。

```
MariaDB [(none)]> select Host, User, Password from mysql.user;
MariaDB [(none)]> create user ‘ユーザ名’@‘localhost’ identified by ‘パスワード’;
MariaDB [(none)]> grant 与えたい権限 on ＊.＊ to ‘ユーザ名’@‘localhost’;
```

```
$ sudo apt install phpmyadmin
```

スペースキーを押してapache2を選択し、パスワードを作成したら、インストールは終わり。

IPアドレス/phpmyadmin/にアクセスして、ログインすればラズパイ上のデータベースをWebブラウザから操作できるようになります。

# データベースを作成する

あらかじめ学習させている野菜の名前と、その野菜に対応した説明文を用意してみる。jaのホームページに詳しく載っていたので、今回は[ここ](https://life.ja-group.jp/food/shun)から拝借してvegetableテーブルを作成してみました。

| class        | description[選び方と保存方法]                                |
| ------------ | ------------------------------------------------------------ |
| パプリカ     | 肉厚で弾力があり、つややかで表面がみずみずしいものを選びましょう。甘くて、食感がジューシーなので、煮込み料理の他、サラダにも向いています。オーブントースターなどで皮がまっ黒になるまで加熱し、皮をむいて食べると、より一層、甘みが増します。水分をきっちりと取り、ビニール袋に入れて冷蔵庫内で保存します。乾燥に弱いので包装せずに放置すると、2日ほどで軟らかくなってしまうので、注意しましょう。 |
| ブロッコリー | 蕾が、こんもりしていて硬く締まり、緑色が濃いものを選びましょう。冬場の紫がかったものは寒さに当たって甘みが増しています。茎は、つやがあり、傷や変色がなく、みずみずしいものが良く、切り口もみずみずしく、空洞のないものがオススメです。外葉のしおれていないものが新鮮です。茹でるよりも、炒めたりレンジで加熱することでビタミン類の損失を抑えることができます。 |
| レタス       | サラダに欠かせない野菜ですが、炒め物や鍋、スープなど、加熱調理もおすすめ。甘みが増し、かさが減るのでたっぷり食べられます。シャキシャキ感が残るように、短時間で調理するのがポイントです。葉にハリがあって、みずみずしく、軽いもの。切り口が10円玉くらいの小ささで、白いものほど新鮮です。購入した際に包まれていたものに包むか、ビニール袋に入れて野菜室へ。傷みやすいので早めに食べ切りましょう。 |
| ほうれん草   | 葉の色が濃く、葉先までピンとして、みずみずしいものを選びましょう。湿らせた新聞紙に包み、ビニール袋に入れて、野菜室で立てて保存。鮮度が命なので、すぐに食べ切れないときは下茹でしておきましょう。冷凍保存もできます。茹でる時は、根元に十字に切れ目を入れると、土が落ちやすく、火の通りもよくなります。熱湯で１～２分茹でたら、冷水にとって素早く冷まし、水気を絞りましょう。 |
| ジャガイモ   | 持ったときに重量感があるもの。芽が伸び始めたり、表面が緑色になっているものは避けてください。日本での代表的な品種は、ホクホクした粉質系の男爵やキタアカリ、そして煮崩れしにくい粘質系のメークイーンです。新聞紙などに包んで、通気性のいい冷暗所か野菜室で保存。リンゴと一緒に保存するとエチレンガスの作用で、芽が出にくくなります。 |

動物でも同様にしてanimalテーブルを作成。

| class            | description[選び方と保存方法]                                |
| ---------------- | ------------------------------------------------------------ |
| コアラ           | 主として夜行性の動物で、早朝や夕方には活発に行動しますが、日中はほとんど地上に降りることはなく、木の上で眠っているか休んでいます。1日のうち約18時間も眠っているそうです。<br/>また、コアラは樹洞を利用したような決まった巣をつくらず、眠るときなども木の股などに挟まったようにして休む習性を持っています。 |
| グラントシマウマ | サバンナシマウマの仲間で、シマウマの体の感じはロバに似ていますが、大きな耳と尾の先がふさ状になっている点などもロバとよく似ていて、鳴き声もウマよりはロバに近い声で鳴きます。他のシマウマに比べると、はっきりとした縞が四肢の端まで伸びているのが特徴です。草原や草木の中では保護色の役目をはたしていて、一度見失うと、極めて見つけにくいんです。 |

# PythonからMySQLのデータを検索して表示させる

いくつかあるライブラリの中でも、今回はPyMySQLを使ってみました。

```
$ sudo pip3 install PyMySQL

$ python3
> import pymysql.cursors
```

エラーが出なければインストール完了です。

GitHubのサンプルコードを参考に、PythonでMySQLを操作するコードを書いていきます。

```python:mysql.py
import pymysql.cursors
 
connection = pymysql.connect(host='localhost',
	user='root',
	password='******',
	db='test',
	charset='utf8',
	# Selectの結果をdictionary形式で受け取る
	cursorclass=pymysql.cursors.DictCursor)

def selectsql(result):
    with connection.cursor() as cursor:
        sql = "SELECT * FROM vegetable WHERE class=ほうれん草"
        #検索
        cursor.execute(sql,result)
        #表示の代わりに引っ張ってくる
        dbdata = cursor.fetchall()
        #必要なカラムの内容だけ抽出
        desc = dbdata[0]['description']
        return desc
    
try:
    sw = 0
    while True:
        #データベースにアクセス
            desc = selectsql(result)
            print(desc)
            
except KeyboardInterrupt:
    pass

```

# 出力結果

```
葉の色が濃く、葉先までピンとして、みずみずしいものを選びましょう。
湿らせた新聞紙に包み、ビニール袋に入れて、野菜室で立てて保存。
鮮度が命なので、すぐに食べ切れないときは下茹でしておきましょう。
冷凍保存もできます。茹でる時は、根元に十字に切れ目を入れると、土が落ちやすく、
火の通りもよくなります。熱湯で１～２分茹でたら、冷水にとって素早く冷まし、水気を絞りましょう。
```

今回は、野菜の選び方や保存のコツを出力しています。

# 参考文献

[Python3でMySQLを操作する - 端っこプログラマーの手帳](http://kzhishu.hatenablog.jp/entry/2017/06/03/162911)