MySQL から CSV ファイルを取得するには、通常は SELECT * FROM tablename INTO OUTFILE filename; のようにする。
しかし以下のようにするにはどうしたらいいかな?
- カラム名をヘッダ行として CSV ファイルの1行目に追加したい
- スクリプトで行いたい
- FILE権限の無い MySQL ユーザを使いたい
ということで、python で SELECT 構文を実行し、python 実行ユーザ権限でファイルに書き込む方法を考えた。
import pymysql.cursors
import csv
db=pymysql.connect(host="localhost", user="selectuser", password="testpassword" , cursorclass=pymysql.cursors.DictCursor)
cursor=db.cursor()
cursor.execute("USE test")
sql=('SELECT * FROM センサ')
cursor.execute(sql)
rows=cursor.fetchall()
cursor.close()
db.close()
if rows:
columnNames = list()
# ヘッダデータを作る
for i in cursor.description:
columnNames.append(i[0])
with open(テーブル,'w',newline='') as 'test.csv':
# 辞書順序を指定しておく
csvwriter = csv.DictWriter(csvfile,columnNames,delimiter=",",quotechar='"')
# ヘッダ行を書き込み
csvwriter.writeheader()
for row in rows:
# csv データを書き込み
csvwriter.writerow(row)
実行
$ python3 export.py
結果
$ cat test.csv
id,センサ,温度,湿度,メモ
1,1,22.0,85.0,ストーブON
2,2,17.0,65.0,廊下