--- Title: pythonでfoobarのalternativeを作る 8 Author: yamasyuh68 Web: https://mimemo.io/m/3A2wRoND5a41zM6 --- ## DBの簡易ビューア 190515 の開発 DBの簡易ビューア出来た まだテーブル名とカラム名を取得して、カラム毎のデータ数を表示するだけ ``` import sqlite3 db=r'database.db' conn = sqlite3.connect( db ) c = conn.cursor() c.execute("select * from sqlite_master where type='table'") table=c.fetchone()[1] # 最初のテーブル名 # print(table) des=c.execute('select * from {}'.format(table) ).description colis=[item[0] for item in des] # print(colis) i=0 nonull=[] null=[] for col in colis : res=c.execute( 'select count(*) from {} where {} IS NULL'.format(table,colis[i]) ) null.append(res.fetchall()[0][0]) res=c.execute( 'select count(*) from {} where {} IS NOT NULL'.format(table,colis[i]) ) nonull.append(res.fetchall()[0][0]) i+=1 print('DATABASE--{}'.format(db)) print(' TABLE --{}'.format(table)) print('') all=[colis,nonull,null] for i in all: for ii in i : print('{:>10}'.format(ii) , end='') print('') c.close() conn.close() input('') ``` - 複数テーブルがあっても最初のテーブルしか表示しない。GUIにしたら選べるように出来ると思うが自分的には需要無いので実装するつもりはない( ´∀`) - **テーブルとカラムにプレースホルダーは使えない**らしい **何故だ!???** でも`format`でいける、↓ここに感謝 https://codeday.me/jp/qa/20190222/300516.html やっぱpythonからsqliteつかうのは面倒だわ**┐('д')┌** - しっかりタグデータを取得出来ているかを知りたくて全てのカラムについてNULLの個数を調べて表示しているが、このときのselectでcountは*にする。 `count A where A IS NULL` ってコードにしたら0しか返ってこなくて少し悩んだ。考えたらcount Aの時点でNULLは除外されてるから当然だった。 - 綺麗に表示するためにformat文を使った。GUIの時もこれで文字列を作ればListViewを使わずにTextCtrlで表示できて簡単かな。でもDBなんだからListViewを使うのが本筋なのだろうか?? - 次はwxでGUIを組んでselect文を実行出来るようにしたいんだけど、whereとかlikeとかlimitとかをどうするかひと悩みだな - select `カラム` from table where `条件式` Limit `個数`  `GOボタン` こんなインターフェースかな DBへのコネクトはその都度閉じた方が良いのかな?