【python】pythonでodbcに接続してデータ取得してcsvに保存を自動化する

ちょくちょく発生する作業で、DBから取得したデータをcsvで保存して提出する

という作業がありまして、めんどいので簡略化したい

理想は、ポチッとワンクリックで作業が終わるような?

という事でpythonで実現してみる。

■作業内容

・DBはDBサーバーでodbc接続のDB2
・DBからデータを取得してcsvで保存

■必要なライブラリ
・pyodbc
・pandas

●まずはDBからデータを取得してprintで表示まで

import pyodbc
import pandas as pd

# SQL Serverへ接続
conn = pyodbc.connect(
"DRIVER={IBM i Access ODBC Driver};"
"SYSTEM=127.0.0.1;"#DBサーバーのIPアドレス
"UID=USERID;"#DBのユーザーID
"PWD=PASSWORD",#DBのパスワード
autocommit=True
)

# データ取得
query = "SELECT * FROM TABLENAME" #取得したいテーブル名を指定
df = pd.read_sql(query, conn)
print(df)

これを実行してみると

ID NAME AGE
0 1 John 30
1 2 Jane 25
2 3 Mike 35
といった感じでデータが取得できました。

●次に取得したデータをcsvで保存

# データをcsvで保存

df.to_csv("output.csv", index=False)

これでoutput.csvというファイルが作成され、データが保存されました。

ただ、CSVを開いてみると

文字化けしている・・・・・

これは、DBから取得したデータがUTF-8でエンコードされているため、CSVもUTF-8で保存する必要があります。

# データをcsvで保存(UTF-8でエンコード)

df.to_csv("output.csv", index=False, encoding='utf-8-sig')

これでCSVを開いてみると、文字化けせずにデータが表示されました!!

●ファイル名に日付を入れる

提出するCSVに日付を入れる事になっているのでこれも自動化してみる

import datetime

# 現在の日付を取得
today = datetime.date.today()
# ファイル名に日付を入れる
filename = f"output_{today}.csv"
# データをcsvで保存(UTF-8でエンコード)
df.to_csv(filename, index=False, encoding='utf-8-sig')

これで、output_2024-06-27.csvというファイルが作成され、データが保存されました!!

●まとめ

import pyodbc
import pandas as pd
import datetime

# SQL Serverへ接続
conn = pyodbc.connect(
“DRIVER={IBM i Access ODBC Driver};”
“SYSTEM=127.0.0.1;”#DBサーバーのIPアドレス
“UID=USERID;”#DBのユーザーID
“PWD=PASSWORD”,#DBのパスワード
autocommit=True
)

# データ取得
query = “SELECT * FROM TABLENAME” #取得したいテーブル名を指定
df = pd.read_sql(query, conn)
print(df)

# 現在の日付を取得
today = datetime.date.today()
filename = f”output_{today}.csv”
df.to_csv(filename, index=False, encoding=’utf-8-sig’)

これで、DBからデータを取得して、日付入りのCSVファイルに保存する作業がワンクリックで完了するようになりました!!

コメント