猛暑、夏バテ、とりあえずJupyterからMySQLに接続

  • #技術ブログ 

猛暑が続いておりますが、皆さん如何お過ごしでしょうか。
今回は夏バテを言い訳に軽めに済まそうと思っております、暑さに弱い半人前エンジニアのうえピーです。

軽めの内容・・・、
なんか最近、csvとか外部ファイル出力してからJupyterで取り込むの面倒臭いと思っていたので、
分析したデータ保持しているMySQLサーバーに直接、接続しちゃおう。
一応、SSLポートフォードで接続するし。

ということで、JupyterからMySQLに接続してみます。
前提として、「過去の投稿」を参考にしてもらって、
Anacondaのデータ分析All in one環境がある前提で話を進めます。

追加ライブラリは、接続ドライバのpymysqlと、
IPythonのマジックコマンドでも接続してみたいので、ipython-sqlもインストールします。
では、楽々condaでインストールしましょ。

> conda install pymysql
> conda install ipython-sql

ありゃ?ipython-sqlが、PackageNotFoundErrorに・・・。
なんと、Anacondaでパッケージ管理してくれていないのか。
しょうがないのでpipにて。

> pip install ipython-sql

よしよし、インストール成功です。

それでは、早速Jupyterにて、

In[1]:import pymysql
In[2]:con = pymysql.connect(host='localhost', port=ヒミツ, db='ヒミツ', user='ヒミツ', password='ヒミツ', charset='utf8')
In[3]:con.commit()
      cur = con.cursor()
      cur.execute('select count(*) from ヒミツ')
      rows = cur.fetchall()
      rows
Out[3]:((4216,),)

OK、接続成功!!順調、順調。

よっしゃ、次はマジックコマンド使ってみよ。

In[4]:%config SqlMagic.autopandas = True
      %config SqlMagic.feedback = False
      %load_ext sql
In[5]:%%sql mysql+pymysql://ユーザー:パスワード@localhost:ポート番号/DBサーバー名?charset=utf8
      select * from ヒミツ order by ID desc limit 10;

げげげ、「ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().」
テーブルにNULLが入っている項目あるからか・・・。

おぉ、突然、熱中症で頭が・・・。
ということで、pandasのDataFrameへの展開は、夏バテを言い訳に今回はあきらめます!!
では、リトライ。

In[6]:%config SqlMagic.autopandas = False
      %config SqlMagic.feedback = False
      %load_ext sql
In[7]:%%sql mysql+pymysql://ユーザー:パスワード@localhost:ポート番号/DBサーバー名?charset=utf8
      select * from ヒミツ order by ID desc limit 10;

OK。成功!!

以上です、猛暑の中でも読めるぐらいの薄めの内容で失礼しました。
次回はがんばりますので、また読んでくださいませ。