pythonでfoobarのalternativeを作る 8 version 8

2019/11/06 14:34 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
pythonでfoobarのalternativeを作る 8
## DBの簡易ビューア

190515 の開発日記
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へのコネクトはその都度閉じた方が良いのかな?
      

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へのコネクトはその都度閉じた方が良いのかな?