【Python】sqlite3からCSV文字列を出力する
はじまり



sqlite3の中のデータ確認!
今入っているテーブルとデータがまあこんな感じです。

実際にPythonでデータを取り出したいと思います!
こんな作業はさっさとjupyter notebookで取り出してしまいたいと思います。
あ~、久しぶりにPython触るなあ。自分が作ったプログラムからデータを取るから分かりやすいというのもあると思うんだが、やはりPythonは読みやすいと身にしみる。文法もちょっと予想で書けちゃったりするし。

と、思ってコード書いてたら、よく分からんエラーが出てきて、エラーコードも大して読まずに適当に直す。しかし、治らない・・・・。どういうこと!?
しょうがねえなあ、ちゃんと読むか・・・。
どれどれ、読んでみると、ん? もしかして、listをjoinした文字列にするのに、そのlistにintが入ってるとダメ? マジデ!? そっかー、最近SIer的なことしかやってないから、DBから取ってくるデータが文字列か数値型かなんていう思考が頭から抜けてしまっている~。

よし、型変換はしたぞ・・・でも、なんかNoneTypeもいる・・・。まあ、嫌な予感はするが、放っておくか・・・。

は? もう直したぞ。なのに、出力できないとはなにごと。

確かに、listの値は全て文字列(str)型になっている・・・。なぜだ・・・。
あ! list_jじゃなくて、jで出力してしまっている! intが入っているtupleのまんまだ!

よしよし・・・いい子だ・・・、list_jにしたらCSV出力できてるぜ。

よしよし、完全勝利かな~。これは。ガッハッハ~

ガッ!!!!! ハ~ッハッ!!!!!!!
あ~、やっぱりNoneTypeを無視してはならなかったか~。

ぬ~、これでは消えないのか~。

お! type判定じゃなくて、Noneかどうかを判定したほうが良いのか! strになった!
一応、最後のデータまで確認するかあ。またなんかあるとめんどいし。

うわああああ、やっぱりいやがった。floatかあ~。

うるせええ!!!
(デバッガ「バグを教えただけなのに・・・。。。」)

よーし、次こそは全部strになってる!

よーし、CSVで全部吐き出されたぞ~。

そして、これがGoogleスプレッドシートに問題なく貼り付けられるのかどうかをチェック。(テーブルの区切りをつけて貼りやすくする。)

よしよし、ちゃんと貼り付けられる。(エラーメッセージが出ている理由は、データ形式をシート上で変えてるからですね。今後使う型はbooleanなので。)

一番欲しかったデータも手に入った! (データ変えなきゃな。服のidじゃなくて、暖かさが欲しい。)
今回作ったコード
今回、sqlite3からCSVを作るために使ったコードはこれです。ファイル書き込み機能はありませんが、僕みたいにExcelとかGoogleスプレッドシート用に使う場合は、これを元にすれば事足りるはずです。
import sqlite3
dbpath = 'wwwardrobe.sqlite' # DB's pathconnection = sqlite3.connect(dbpath)cursor = connection.cursor()
tables = ['users', 'wardrobes', 'history_own', 'history_wear', 'weather_today']
for i in tables: cursor.execute("SELECT * FROM {};".format(i)) rows = cursor.fetchall() print(i + ' ------------------------------------------------------') for j in rows: j_list = list(j) for k in range(len(j_list)): if type(j_list[k]) is int: j_list[k] = str(j_list[k]) elif j_list[k] is None: j_list[k] = "" elif type(j_list[k]) is float: j_list[k] = str(j_list[k]) print(','.join(list(j_list)))おしまい


以上になります!
記事を共有
この記事が役に立ったなら、ぜひ他の人と共有してください!