SQlite3のDB作成、閲覧、CSVインポート、出力できるGUIアプリを作成してみた！

PythonとTKinterを使い、SQlite 3のDDB作成、閲覧、CSVインポート、出力(エクスポート)、テーブルの内容確認ができるGUIアプリを作ってみました。

## アプリの目的

パソコン初心者でも簡単にデータベースを作成し、使えるようにする。

そのために、機能を4つにしぼり、4つのボタンだけで操作できるようにする。

## アプリの機能

アプリのコードを実行することで、GUIアプリが自動で起動します。

### MAKE

MAKEボタンを押すことで、データが何も入っていない空のデータベースファイル「NEW.db」を作成します。

また、MAKEボタンを押すことで、データベースの中身（テーブル名）を確認できます（ターミナルに表示）。

### INPUT

INPUTボタンを押すことで、データベース「NEW.db」にCSVファイルをテーブルとして保存できます。

CSVファイルは入力ダイアログで選択できます。

保存先のテーブル名（「N1、N2、N3、N4」のいずれか）は、コンボボックスから選択できます。

### OUTPUT

OUTPUTボタンを押すことで、作成しておいたテーブルをCSVファイルとしてエクスポートできます。

出力するCSVファイルは、コンボボックスから選択できます。

### VIEW

VIEWボタンを押すことで、作成したテーブルの内容を確認できます。

閲覧するテーブルはコンボボックスから選択できます。


## アプリのコード

```python:sqlite-gui.py

# coding: utf-8

import sqlite3
import os
# tkinterのインポート
import tkinter as tk
# CSVファイルのインポート
import csv
#入力ダイアログをインポート
import tkinter.filedialog
#pandasをインポート
import pandas as pd


#コンボボックス用をインポート
from tkinter import *
import tkinter as tk
import tkinter.messagebox as mb
import tkinter.ttk as ttk


# データベースの情報
dbname = "NEW.db"
conn = sqlite3.connect(dbname)
cur = conn.cursor()
# テーブルの名前（省略可）
tablename = "N1", "N2", "N3", "N4"

### GUI ###
# ウインドウの作成
root = tk.Tk()
# ウインドウのサイズ指定
root.geometry("300x180")


# 関数の定義
def combo_selected():
    global combo
    print(combo.get(),"が選択されました")

def MAKE():  
    pd.DataFrame()
    df = pd.DataFrame()
    print(df)
    # dbの中身をpandasで表示する。
    df = pd.read_sql("SELECT * FROM sqlite_master WHERE type='table'", conn)
    print(df)

def INPUT():
    # ファイル選択ダイアログの表示
    file_path = tkinter.filedialog.askopenfilename()
    # ファイルが選択された場合
    if len(file_path) != 0:
        #CSVをpandasで読み出す
        df = pd.read_csv(file_path)
        # コンボボックスで選択したCSVファイルをSQLに書き込む
        # if_existsで、もしすでにexpenseが存在していたら、書き換えるように指示
        global combo
        df.to_sql(combo.get(), conn, if_exists='replace')
        print(df)
       
def OUTPUT():
    global combo
    if combo.get() == "N1":
            # 作成したテーブルをpandasで読み出す
        df = pd.read_sql("SELECT * FROM 'N1'", conn)
            #テーブルをCSV ファイルとして出力
        df.to_csv('N1.csv')
        print("テーブルをCSVファイル「N1.csv」として出力しました")
    elif combo.get() == "N2":
        df = pd.read_sql("SELECT * FROM 'N2'", conn)
        df.to_csv('N2.csv')
        print("テーブルをCSVファイル「N2.csv」として出力しました")
    elif combo.get() == "N3":
        df = pd.read_sql("SELECT * FROM 'N3'", conn)
        df.to_csv('N3.csv')
        print("テーブルをCSVファイル「N3.csv」として出力しました")
    elif combo.get() == "N4":
        df = pd.read_sql("SELECT * FROM 'N4'", conn)
        df.to_csv('N4.csv')
        print("テーブルをCSVファイル「N4.csv」として出力しました")
    

def VIEW():
    global combo

    if combo.get() == "N1":
    #df = pd.read_sql(sql="SELECT * FROM N1" ,con=conn)
        df = pd.read_sql("SELECT * FROM 'N1'", conn)
    elif combo.get() == "N2":
        df = pd.read_sql("SELECT * FROM 'N2'", conn)
    elif combo.get() == "N3":
        df = pd.read_sql("SELECT * FROM 'N3'", conn)
    elif combo.get() == "N4":
        df = pd.read_sql("SELECT * FROM 'N4'", conn)
    #df = pd.read_sql("SELECT * FROM 'N1'", conn)
    print(df)


# ボタン作成
run_button1 = tk.Button(root, text = "MAKE", command = MAKE)
run_button2 = tk.Button(root, text = "INPUT", command = INPUT)
run_button3 = tk.Button(root, text = "OUTPUT", command = OUTPUT)
run_button4 = tk.Button(root, text = "VIEW", command = VIEW)

# ボタンの位置を指定
run_button1.place(x = 110, y = 30)
run_button2.place(x = 110, y = 60)
run_button3.place(x = 110, y = 90)
run_button4.place(x = 110, y = 120)

#2---プルダウン作成
#コンボボックスの選択肢を入れる
option = ["N1", "N2", "N3", "N4"]
#上が文字列の場合
variable = tk.StringVar()
#コンボボックスを設置
combo=ttk.Combobox(root,values=option,textvariable=variable)
combo.bind("<<ComboboxSelected>>")
combo.pack(pady=5)

# ウインドウ状態の維持
root.mainloop()

```


## アプリの使い方

このアプリは、データベースを作成できるだけでなく、既存のCSVファイルを活用してテーブルを作成したり、テーブルをCSVファイルとしてエクスポートできます。

CSVファイルは他のExcelなどの表計算ソフトでも利用でき、グラフとして出力することもできます。

一方、データベース内に作成した複数のデータ（レコード）は、SQlite 3を利用して、まとめて取り出すことができます。

大量のデータの保存や管理にデータベース（SQliete3）を利用し、そのデータを他のアプリで活用するというのが一番いい使い方です。

## アプリのカスタマイズ方法

このアプリは複雑なコードがないために、比較的簡単にカスタマイズすることができます。

### データベース名の変更

MAKEボタンで作成したデータベース名「NEW.db」は変更できます。プログラムの最初にある

```
# データベースの情報
dbname = "NEW.db"
```
の部分を書き換えてください。

### テーブル名の変更・追加

テーブル名は変更できます。プログラムの最後の方にある
```
#2---プルダウン作成
#コンボボックスの選択肢を入れる
option = ["N1", "N2", "N3", "N4"]
```
を書き換えてください。

また、テーブルを追加することも可能です。

その場合は「関数」内にコードを追加してください。このテーブルの追加はある程度プログラミングの知識が必要ですが、初心者でもコピペでできるようになっています。

## DB Browser for SQLiteについて

作成したデータベースのデータはGUIアプリ「**DB Browser for SQLite**」でも利用できます。

編集機能など高度な機能も搭載されているので、ぜひ試してみてください。

DB Browser for SQLite https://sqlitebrowser.org/

Linux Ubuntuは以下のコマンドでインストールできます。

```
sudo apt install sqlitebrowser -y
```

WindowsやMacは以下からダウンロードできます。

Downloads - DB Browser for SQLite https://sqlitebrowser.org/dl/