機械の中の学習日誌

社畜によるIT技術メモです。今日も元気です。

ExcelのデータをDataFrame経由でMySQLに登録する

複数個あるエクセルのデータをMySQLに登録した時のメモ

エクセルをDataFrameに読み込み、DataFrameからMySQLのテーブルにデータを登録する。

ライブラリインストール

python用のORM、sqlalchemcyをインストール。Jupyter Notebookから以下のコマンドを実行

!pip install sqlalchemy

MySQL接続設定

url中の括弧内を接続環境に合わせて変更する。

import glob
import pandas as pd
import sqlalchemy as sa

url = 'mysql+pymysql://(user):(password)@(host):(ip)/(database_name)?charset=utf8'
engine = sa.create_engine(url, echo=False)

エクセル読み込み&DB登録

  • 特定のディレクトリ配下に、同じフォーマットのエクセルデータが複数存在している前提
  • ファイルを一つ一つ読み込み、DBに流し込んでいく。
# 指定したディレクトリ配下のファイルをすべて読み込み
files = glob.glob('/(file_path_to)/*')
for i, file in enumerate(files):
    print(i, file)
    # エクセルをDataFrameに読み込み。(列名は2行目に存在している想定)
    df = pd.read_excel(file, header=1)
    # 指定したテーブルにデータを登録
    df.to_sql('xxxxx_tbl', engine, index=True, if_exists='append')

DataFrameのto_sql関数の引数if_existsをappendにすることで、テーブルが存在しない場合は、テーブルを新規作成しデータ登録、存在する場合はデータの追加登録。

pandas.DataFrame.to_sql — pandas 1.2.1 documentation

登録データの件数確認

登録完了後、以下を実行することでテーブルの件数を確認

engine.execute("SELECT count(1) FROM xxxxx_tbl").fetchall()

以上

参考

pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me

pandas.DataFrameとMySQLの連携 - Qiita