MemSQLを使ってみようVol.13: 実践編6

#今回はJupyter NotebookとMemSQLの連携に挑戦！！
前回の検証では、Mac環境上のDockerを経由して、MemSQLとRを連携してみました。今回はPython系で著名なJupyter NotebookをMemSQLと連携させてみたいと思います。Pythonの開発環境としても良く使われている様なので、分析だけではなく、機械学習やAIへのアプローチを、Python系で行われる際の参考になれば幸いです。
![スクリーンショット 2020-02-19 18.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/60c35399-d38b-1d73-506f-8a1a8be64156.png)
##導入手順
今回は前回と同様に、Mac環境で作業を行います。

###(1)Xcodeを導入します
まずは、お約束のXcodeを導入します。
![スクリーンショット 2020-02-19 12.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/a8ce9407-5af9-5cec-13b7-16a7e66287df.png)

自分の環境では、この段階でコマンドライン系も含めて全部入りましたので、関連環境の整備に移ります（既にネットに上がっている諸先輩方の投稿では、ここでコマンドライン環境を導入されているケースがありますので、念のため確認してみてください。

###(3)Homebrewをインストールします
[**Homebrewのホームページ**](https://brew.sh/index_ja)より指示に従ってインストールします。
![スクリーンショット 2020-02-19 13.06.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/1be74db8-739c-2716-3377-74c176043bec.png)
Homebrewが導入されたかを確認

~~~shell
% brew update
% brew upgrade
% brew doctor
~~~

因みに、今回の作業環境はこんな感じでした（参考まで）
![スクリーンショット 2020-02-19 15.18.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/f8a784dc-e84f-5b24-e8df-7a7e3891633e.png)

pip3経由でいよいよJupyter Notebookのインストールを行います。

~~~shell
% pip3 install jupyter 
~~~

インストールが始まりますので、暫くの間心静かに完了を待ちます。
![スクリーンショット 2020-02-19 14.43.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/62ed6367-c414-c688-8d41-c86d89471c7d.png)
インストールが終わったら、作業用のディレクトリを作って移動します。（xxxは適宜設定してください）

~~~shell
% mkdir xxx
% cd xxx
~~~

これは、jupyter notebookを実行したディレクトリが自動的にホーム画面になるみたいなので、あちこちに散らかる事を避ける為にも、任意の場所にmkdirで作業用のディレクトリを作成して、そのディレクトリに移動してからjupyter notebookを起動するようにしましょう。

~~~shell
% jupyter notebook
~~~

起動処理が始まりますので、暫くお待ちください。
![スクリーンショット 2020-02-19 14.45.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/727c0b9b-45b5-f911-e3eb-5ed89950d4cc.png)

暫くインストールが実行された後に、ブラウザへJupyter Notebookのホームページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/5b849ed8-6c91-de7c-efda-e004b95cbc75.png)
お約束の動作確認をしてみます。

~~~shell
print("Hello World")
~~~

この記述を空欄に入れてRunを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/d64a60a6-93a9-f6e1-261e-891da34fd145.png)
無事に動き始めた様です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/ea95b39a-4d58-f194-f05e-8eb9349f61f6.png)

##いよいよMemSQLとの連携・・・
さて、いよいよMemSQLとの連携作業に入りますが、その前にクリアしておかなければならない、ある意味非常に重要な準備作業があります。既にお気づきの方も多いかと思いますが、双方共にGUIベースのコンソールを使う場合・・・良くある8080衝突問題が顕在化してきますので、その対策を施しておく必要があります。今回はJupyter Notebook側の配信ポートを引越しさせる事にします。

作業的には以下の手順をMacのコンソールで行います。

~~~shell
% jupyter notebook --generate-config
~~~

ホームのトップディレクトリに以下のファイルが出来ると思いますので、その内容を確認してポート番号を変更します。

**~/.jupyter/jupyter_notebook_config.py**

viエディタ等で

**#c.NotebookApp.port = 8888**

を探して、行頭の#を削除してください（この場合は8888が再起動後のポートになります）

![スクリーンショット 2020-02-19 17.23.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/180bdb28-8161-60e8-989a-1ab47deee8ba.png)

無事にMemSQLのコンソールとJupyter Notebookが共存出来る様になりました。

次に**pymysql**をインストールします。

~~~shell
% pip3 install pymysql
~~~

サクッと入りました。

![スクリーンショット 2020-02-19 15.44.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/220ace70-2736-6938-f318-2cb9e78f091a.png)


今回も前回同様に、Mac上のDocker環境にMemSQLを動かして、その環境と今季のJupyter Notebookを連携させる方向で作業を行います。

Docker上でMemSQLを起動します。

~~~shell
% docker start memsql-ciab
~~~

###いよいよ連携検証を実行！！
今回の連携も、得意のMySQLのフリ作戦で行きたいと思います。データベースは、以前の検証で作ったR連携時のテーブルをそのまま読み出してみます。

Jupyter Notebook上で以下のスクリプトを入力します。

~~~python
import pymysql

db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='',
                     db='r_db',
                     charset='utf8',
                     cursorclass=pymysql.cursors.DictCursor)

db.commit()
~~~

前段までの設定に問題が無ければ、最後の**db.commit()**でMemSQLと接続されます。

次に、ターゲットのテーブルからデータを読み出してみます。

~~~python
with db:
    cur=db.cursor()
    cur.execute("SELECT * FROM test99")
    rows=cur.fetchall()
    for row in rows:
        print (row)
~~~

無事にデータを読み出せました。
![スクリーンショット 2020-02-19 17.54.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/2fb03410-3e53-ec73-e192-43aed47d7a9d.png)

###今度はJupyter NotebookからMemSQLにデータを書き込んでみます・・・
基本的には、前述の方法を踏襲して行けば問題なくゴールに辿り着けると思います。

~~~python
import pymysql

db = pymysql.connect(host=  '127.0.0.1',
                             user='root',
                             password='',
                             db='r_db',
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)

db.commit()

with db:
   cur=db.cursor()
   cur.execute("CREATE TABLE IF NOT EXISTS p_test(id INT auto_increment primary key, data VARCHAR(25))")
   cur.execute("INSERT INTO p_test(data) VALUES('aaaaaaa')")
   cur.execute("INSERT INTO p_test(data) VALUES('bbbbbbb')")
   cur.execute("INSERT INTO p_test(data) VALUES('ccccccc')")
~~~

結果をMemSQLのコンソールで確認してみます。
![スクリーンショット 2020-02-19 18.21.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/0d66898e-db24-ffbe-1e66-4682d534a12c.png)

無事に書き込みの検証も完了できました。

#今回のまとめ
今回は、Python界で著名なJupyter NotebookとMemSQLの連携を簡単に検証してみました。基本環境の構築が上手く出来れば特に難しい事もなく、次の応用展開が可能になると思います。機械学習やAI,また分析等のエンジンとしてPython界で良く使われている様ですので、ぜひこの機会にMemSQLとの連携稼働を検討してみてください。

今回の環境は、Mac上にDocker版のMemSQL、通常インストールのjupyter Notebookを組み合わせています。前回のR同様パワーのあるノートブック上でも構築できる環境ですので、気軽に高速インメモリSQLを活用して頂ければ幸いです。

[**MemSQLを使ってみようVol.14: 実践編7**](https://qiita.com/wadaken1961/items/98a30ee2807d4533f2ac)に続く

#謝辞

本解説に転載させて頂いているスクリーンショットは、一部を除いて現在MemSQL社が公開されている公式ホームページの画像を使わせて頂いており、本内容とMemSQL社の公式ホームページで公開されている内容が異なる場合は、MemSQL社の情報が優先する事をご了解ください。