【Python】sqlite3からCSV文字列を出力する

906 語
5 分
【Python】sqlite3からCSV文字列を出力する

はじまり#

135ml avatar
135ml
今回は、Pythonでsqlite3からCSVの文字列を出力するというテーマです。
135ml avatar
135ml
なんで、こんな記事を書こうと思ったかというと、「sqlite csv」とググってもcsvをsqlite3のDBのテーブルに入れる記事ばっかりヒットしたからです(TへT) その悲しさから、この記事を思いのまま勢いに任せて書いています!
135ml avatar
135ml
それじゃあスタート!

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 path
connection = 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)))

おしまい#

135ml avatar
135ml
ふ~、なんか勢いで書いてしまったな。まあ、JPEGminiの1日の無料分をここで良い感じに使い切れたし、良かった良かった。 (´▽`) ( ´ ▽ ` )
リサちゃん avatar
リサちゃん
・・・元気なことは良いことです

以上になります!

記事を共有

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

【Python】sqlite3からCSV文字列を出力する
https://endorphinbath.com/posts/sqlite3-to-csv/
著者
kinkinbeer135ml
公開日
2021-11-24
ライセンス
CC BY-NC-SA 4.0
Profile Image of the Author
kinkinbeer135ml
SIerをやめて、プログラミングを勉強しています。※Amazonアソシエイトに参加しています。
お知らせ
私のブログへようこそ!これはサンプルのお知らせです。
音楽
カバー

音楽

再生中なし

0:00 0:00
歌詞なし
カテゴリ
タグ
サイト統計
記事
287
カテゴリー
8
タグ
93
総文字数
486,174
運用日数
0
最終活動
0 日前

目次