SQLAlchemyとPandasを使いスムーズにCSVファイルを作成する


投稿日 2019年6月24日 >> 更新日 2023年3月2日

今回はSQLAlchemyとPandasを使いCSVファイルを作成していきたいと思います。

データベースの種類は豊富であれもこれもと操作するのはキャパシティ的に限界なところがある。そんな苦労も和らげてくれるツールがPythonのサードパーティであるSQLAlchemyです。

SQLAlchemyを使えばSQLiteはもちろんMySQLやPostgreSQLといった各データベース操作を簡単に行えるようになります。

私の場合はMySQLを使用しているので接続させるためにPyMySQLをSQLAlchemyのドライバとして使用していきます。

実行環境&使用ライブラリ

実行環境
Windows Subsystem for Linux
Python 3.6.8
pip 9.0.1
使用ライブラリ ライセンス
sqlalchemy MIT
pymysql MIT
pandas BSD

SQLAlchemyの操作

まずは必要なモジュールをインポートし各種操作を簡単に見て行きます。

インポートしたらデータベースへ接続します。


import sqlalchemy as sa

"""
pymysqlドライバを使いuser名をroot、パスワードを入力し
host、port、データベース名を入力する
"""
db = 'mysql+pymysql://root:password@127.0.0.1:3306/dbname'

# 接続し変数に渡す
engine = sa.create_engine(db)

接続されたのでさっそくテーブルを取得してみます。


tb = engine.execute('show tables')

# for文で中身を取り出します
for i in td:
    print(i)
......
......
('blogs_blog',)
('blogs_category',)
.......
.......

execute()の引数にSQLクエリを渡す事によって接続されているデータベースの操作を行う事が出来ます。


# データベースの確認
td = engine.execute('show databeses')

# データベースの選択
engine.execute('use dbname')

# テーブル内のデータを取得
td = engine.execute('select * from blogs_blog')

PandasでCSVファイルを作成する

それではSQLAlchemyからデータを取得し、それをPandasのDataFrameに渡し少し修正してからCSVにしたいと思います。

先ほどの続きとしまして、pandasをインポートします。

import pandas as pd

# 目当てのデータを取得する
td = engine.execute('select id, title from blogs_blog')

# pandasのデータフレームに渡す
df = pd.DataFrame(td)

# 0~4行目までを取得
df.head()

カラム名(列名)がデフォルトで番号付けされているのでそれぞれ新しく名前付けします。


# renameとすることで既存の名前を変更することが出来ます
# 名前の変更は辞書型で渡し、inplace=Trueにより反映されます
df.rename(columns={0:'ID', 1:'Title'}, inplace=True)

最後にCSVファイルとして保存します。


# 保存
df.to_csv('dbname.csv')

# 読み込み
df = pd.read_csv('dbname.csv')

# 中身の確認
df.head()

以上でSQLAlchemyとPandasを使ったCSVファイルの作成を終わります。

他にも色々な使い方があるので遊んでみましょう。

最後までご覧いただきありがとうございます。