猛暑、夏バテ、とりあえず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;
以上です、猛暑の中でも読めるぐらいの薄めの内容で失礼しました。
次回はがんばりますので、また読んでくださいませ。