いつもはdjangoからしかアクセスしないローカルのmysqlですが、今回はデータ分析で使うためのデータにpythonからアクセスしたかったので、記事にしてみました。
mysqlから取得したデータを最後はスプレッドシートにあげるところまでやるのが、今回のシリーズの流れです。
日頃mysql叩くだけなら、ターミナルから実行もしくはSequel proさんにお世話になるケースが多いですが、直接pythonコードでmysql叩けた方が便利なケースも増えると思いますので、暇な時にご参考に読んでみてください。
やりたいこと
ざっと、以下のようなことを実施していきたいと思います。
- python(pycharm環境)でmysqlへ接続
- sql文をpythonコード内に入れて、pythonでmysqlのデータを取得
- 取得したデータをcsvにしてsheetsAPIを使ってスプレッドシートへ書き込み
今回は1と2を実施していきます。3については、過去みてきたsheetsAPIの使い方も参考になりますので、過去記事リンクも以下に貼っておきます。
環境・install packageなどの前提条件
以下の前提で動作するようにしてあります。2系の記事は多くあったのですが、3系の記事って実はまだあんまり無いんですね。
OS:macOS Catalina
python: 3.7
mysqlclient: 1.4.6
mysqlclientのインストール
pip3にmysqlclientをインストしておいてください。pipでインストしてもらっても問題ありません。
//ターミナルで実行
pip3 install mysqlclient
mysqlclientがインストールできない時
たぶん、brew上にmysqlがインストールされていないケースかなぁと(初めてやられる方がエラーを起こすことをイメージしています。その他のケースもあるので悪しからず)。下記方法で直らない場合はググってください。
//ターミナルで実行
brew install mysql
実際のコード紹介
以下のコードでローカルmysqlにアクセスして、対象DB・テーブルからデータを5つ取得可能です。
#!/usr/bin/env/ python # coding:utf-8 # CSV取り扱う関係 import io # import csv #表示関係 from pprint import pprint # MySQL import MySQLdb def sql_to_csv(): """MySQLでクエリー検索して、結果をもとに表示する """ # クエリー結果の出力先ファイルオブジェクト->次回以降でCSVファイルに化けさせて、スプレッドシートに表示するためこの名表 csvfile = io.StringIO() # MySQL に接続 config = { 'host': '127.0.0.1', 'password': 'XXXXX', //mysqlへ接続するためのパスワード 'user': 'root', 'database': 'sale_data' //利用するDBの名前、今回は販売データを利用したのでDBName:sale_dataを利用 } # configをアンパック cnx = MySQLdb.connect(**config) cursor = cnx.cursor() # SQL を投げる # DB内にcoupon_logというテーブルがあるので、そこから全データ取得して5件だけ取得 cursor.execute(""" SELECT * FROM coupon_log LIMIT 5 """) #fetchallでデータを取得して、データを一行ずつcsvfileに書き込む rows = cursor.fetchall() if rows: for r in rows: csvfile.write(str(r)) # MySQL への接続を切る cursor.close() cnx.close() # csvfileに一時保存されてるデータを取得、csvfileを閉じる csv_data = csvfile.getvalue() csvfile.close() return csv_data if __name__=="__main__": data = sql_to_csv() pprint(data)
実行結果
実行すると以下のように表示されるかと思います。データの中身はみなさんがアクセスしたDBによりけりですが。

簡易コード解説
さて、一部ではありますが、mysqlへ接続するための基本的なお作法について説明していきます。
mysqlへ接続するためのconfigデータについて
コードだとこの部分の説明です。
# MySQL に接続
config = {
'host': '127.0.0.1',
'password': 'XXXXX', //mysqlへ接続するためのパスワード
'user': 'root',
'database': 'sale_data' //利用するDBの名前、今回は販売データを利用したのでDBName:sale_dataを利用
}
host :127.0.0.1って?
hostは127.0.0.1で指定しています。これは、ローカルループバックアドレスという物です。ローカルループバックアドレスとは、自分自身を指す特別IPのことであり、os内の直接のローカル環境に接続する時に利用するIPとでも覚えておいてもらえればと思います。
user
userはrootユーザを指定します。基本設定をごちゃごちゃいじっていない前提だと、rootユーザで特権アクセスしていることが一般的だと思います。
database
データベース名を指定します。データベース名がわからない方は、SHOW databases; をして探してください。基本的なmysqlコマンドは以下の記事にまとめてあります。
まとめ
今回はコードの説明はかなり端折りましたが、特段難しいことはしていないので、大丈夫かと思います。
ioがわからないかたもいるかもですが、pythonの標準モジュールで仮にデータを作成したい時に非常に有用ですので、リファレンス読んでもらえるといいかと思います。
次回以降で、
・mysqlのCRUD(クラッド)を一式pythonから行う方法
・取得データをcsv化して、スプレッドシートにupする方法
など紹介していきます。