いつもは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 mysqlclientmysqlclientがインストールできない時
たぶん、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する方法
など紹介していきます。


