【SQLite】SQLite3 データを HTML で出力する (Ubuntu18.04 環境)【SW】

SQLite3 データを HTML で出力する (Ubuntu18.04 環境)

シェルスクリプトを使って SQLite3 DB の内容を HTML として出力する。
 

 

DB に存在するテーブル名を取得する

Sample.db に存在するテーブル名を取得する

Sample.db から全てのテーブル名を表示する。
Summary と Details というテーブルが存在していることが分かる。

% sqlite3 ./Sample.db ".tables"
Summary Details

 

各テーブルに存在するレコード名を取得する

Sample.db::Summary テーブルからレコードを取得する

Summary テーブルの各レコードの型を表示する。
ついでに ".header on" を行い、レコード部分も表示する。

% sqlite3 ./Sample.db ".header on" "PRAGMA table_info(ATG);"
No|Name|type|success|init_val|cur_val
0|Spec|text|0||0
1|Cycle|int|0||0
2|Group|text|0||0
3|gCycle|int|0||0
4|Case|text|0||0
5|oCycle|int|0||0
6|CommandFile|int|0||0
7|SwitchCase|int|0||0
8|Command|text|0||0

 
ちなみに以下のようにフィルタリングすれば、Name レコードのみが抽出できる

% sqlite3 ./Sample.db ".header on" "PRAGMA table_info(ATG);" | awk -F'|' '{ print $2 }'
もしくは以下の2つのどちらかでも良い。
% sqlite3 ./Sample.db ".header on" "PRAGMA table_info(ATG);" | awk 'BEGIN{FS="|"}{ printf "%s\n", $2 }'
% sqlite3 ./Sample.db ".header on" "PRAGMA table_info(ATG);" | cut -d'|' -f2
Name
Spec
Cycle
Group
gCycle
Case
oCycle
CommandFile
SwitchCase
Command

 

Sample.db::Details テーブルからレコードを取得する

Details テーブルの各レコードの型を表示する。
ついでに ".header on" を行い、レコード部分も表示する。

% sqlite3 ./Sample.db ".header on" "PRAGMA table_info(Details);"
No|Name|type|success|init_val|cur_val
0|starttime|date|0||0
1|Spec|text|0||0
2|Cycle|int|0||0
3|Group|text|0||0
4|gCycle|int|0||0
5|Case|text|0||0
6|oCycle|int|0||0
7|oLine|int|0||0
8|Command|text|0||0
9|result|int|0||0
10|ResultString|text|0||0
11|preview|text|0||0
12|loop|int|0||0

 

全レコードの値を表示する

デフォルト形式での表示

#!/bin/sh
sqlitedb=$1

for i in `sqlite3 ${sqlitedb} ".tables"`
do 
  echo "######### ${i} #########"
  sqlite3 ${sqlitedb} ".header on" "select * from ${i};"
  echo
done

 
以下、結果である。

######### Summary #########
Spec|Cycle|Group|gCycle|Case|oCycle|CommandFile|SwitchCase|Command
Normal|1|Company|1|BootON|1|2|0|NewModel_SwON
Normal|1|Company|1|Initialize|1|3|1|Init,Lv=3
Normal|1|Company|1|Setup|1|4|2|NewModel_Setup
以下略

 

HTML形式での表示

以下 SQLiteのスキーマ定義をHTML形式で出力する - ちくわプログラマにっき より転記し、一部を変更した。
レコード部分も含めて HTML 形式にするには次のようなスクリプトを用意する。
単にクエリの結果のみ HTML にするのであれば「sqlite3 -html Sample.db "select * from Summary;"」といった一文を書くだけで良い。

#!/bin/sh
sqlitedb=$1

echo "<html><body>"
for i in `sqlite3 ${sqlitedb} ".tables"`
do 
  echo "<h2>${i}</h2>"
  echo "<table border=1>"
  echo "<tr>"
  for j in `sqlite3 ${sqlitedb} "PRAGMA table_info(${i});" | awk 'BEGIN{FS="|"}{printf "%s\n", $2}'`
  do 
    echo "<th>${j}</th>"
  done
  echo "</tr>"
  sqlite3 -html ${sqlitedb} "select * from ${i};"
  echo "</table>"
done
echo "</body></html>"

 
このスクリプトの PowerShell 版はこちらである。
 

次のように表示される。
f:id:dnkrnka:20180908172116p:plain

 
また, HTML 文は以下である。

<html><body>
<h2>Details</h2>
<table border=1>
<tr>
<th>starttime</th>
<th>Spec</th>
<th>Cycle</th>
<th>Group</th>
<th>gCycle</th>
<th>Case</th>
<th>oCycle</th>
<th>oLine</th>
<th>Command</th>
<th>result</th>
<th>ResultString</th>
<th>preview</th>
<th>loop</th>
</tr>
<TR><TD>2018-09-06 10:58:42</TD>
<TD>Normal</TD>
<TD>1</TD>
<TD>Company</TD>
<TD>1</TD>
<TD>BootON</TD>
<TD>1</TD>
<TD>1</TD>
<TD>NewModel_SwON</TD>
<TD>0</TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
<TR><TD>2018-09-06 10:58:42</TD>
<TD>Normal</TD>
<TD>1</TD>
<TD>Company</TD>
<TD>1</TD>
<TD>Initialize</TD>
<TD>1</TD>
<TD>2</TD>
<TD>Init,Lv=3</TD>
<TD>0</TD>
<TD>/sbin/init</TD>
<TD>systemd</TD>
<TD></TD>
</TR>
<TR><TD>2018-09-06 10:58:45</TD>
<TD>Normal</TD>
<TD>1</TD>
<TD>Company</TD>
<TD>1</TD>
<TD>Setup</TD>
<TD>1</TD>
<TD>3</TD>
<TD>NewModel_Setup</TD>
<TD>0</TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>

中略

</table>
</body></html>