【python】pythonでDBの別々のテーブルから取得したデータを順番にエクセルに保存する

定型業務の自動化はpythonの得意とする所

今回、私がよくやる作業を自動化しようと思う

それが、複数のDBのテーブルからselectした内容をエクセルに貼って保存する作業。

正直だれでも出来る作業だし、時間もそんなかからないけど

自動化出来たら楽

●自動化の仕様

3つの以下のテーブルからselect

・table_a
・table_b
・table_c

このテーブルからselect分で取得した内容を順番にエクセルに貼り付けて、日付をつけて保存する

エクセルの名前は「test_20260305.xslx」のような感じ

DBはDB2です

●実装

import pandas as pd
import pyodbc
import datetime

ID = '1234567890'

connect = pyodbc.connect(
"DRIVER={IBM i Access ODBC Driver};"
"SYSTEM=127.0.0.1;"
"UID=USAERID;"
"PWD=USERPWD;"
)

# table_aからデータを取得
query = f"SELECT * FROM TABLE_A WHERE SERID= '{ID}'"
df_table_a = pd.read_sql(query, connect)

# table_bからデータを取得
query = f"SELECT * FROM TABLE_B WHERE SERID= '{ID}'"
df_table_b = pd.read_sql(query, connect)

# table_cからデータを取得
query = f"SELECT * FROM TABLE_C WHERE SERID= '{ID}'"
df_table_c = pd.read_sql(query, connect)

# エクセル生成
today = datetime.date.today()
filename = f"test_{today}.xlsx"

# エクセル書き込み
with pd.ExcelWriter(filename, engine='openpyxl') as writer:
df_table_a.to_excel(writer, sheet_name='Sheet1', index=False, startrow=0)
df_table_b.to_excel(writer, sheet_name='Sheet1', index=False, startrow=len(df_table_a)+2)
df_table_c.to_excel(writer, sheet_name='Sheet1', index=False, startrow=len(df_table_a)+len(df_table_b)+4)

 

これで簡単完成!!

あとは作業時にこのpythonを実行するだけ!

毎日の作業がこれで少し楽になる!

コメント