PySimpleGUI

【PySimpleGUIでメモアプリ開発】<<第3回>>データベースを作成

本記事は下記記事の続きであり、PySimpleGUIでデータベースを作成することに特化して解説していきます。

【PySimpleGUIでメモアプリ開発】<<第2回>>ボタン作成 インストールから実行までの詳細は下記で解説しています。 今回の記事はこの続きであり、PySimpleGUIボタン作成に特化して解説して...

図のような登録ボタンを作成したので、このボタンを押すとデータがデータベースに保存されるトリガーとなるように設定を進めていきます。

データベース作成に必要なライブラリをインポート

sqlite3はpythonでデータベースを操作できるライブラリです。

詳細はHPを参考にしてください。

基本的な記述方法はSQLと変わりません。

※MySQLをPythonで使う方法もありますが今回は使用しません

contextlib モジュールについてはこちらを参考にしてください。

簡単に説明するとPythonでシンプルにwith文を使える便利なモジュールといったところです。

import sqlite3
from contextlib import closing

データベースを作成して接続する

データベースの名前を定義してコネクトします。

dbname = 'メモアプリ.db'
conn = sqlite3.connect(dbname)

登録ボタンが押された際にDBへ保存する

conn.cursor()はデータベースに接続するための定型文です。

c.execute(create_table)でテーブルが作成されます。

以下、itemsというテーブルを作成する文です。(テキスト型のdata、koumoku、naiyouというカラムを用意)

”’create table items (date TEXT,koumoku TEXT,naiyou TEXT)”’

すでにテーブルがある場合は”database already exist”と表示される仕様とします。

次にitemsテーブルにテキストボックスで入力されたデータを挿入する文です。

値を埋めたいところを?にしておきます。

insert_sql = ‘insert into items (date, koumoku, naiyou) values (?,?,?)’

executemanyメソッドでクエリ(SQL文)を実行できます。

executemany(SQL文, タプルのリスト)という構文で今回はSQL文で挿入を行います。

c.executemany(insert_sql, items)

最後に、conn.commit()でデータベースへコミットされ、変更が反映されます。

with closing(sqlite3.connect(dbname)) as conn:
    c = conn.cursor()
    create_table = '''create table items (date TEXT,koumoku TEXT,naiyou TEXT)'''
    try:
        c.execute(create_table)
    except:
        print("database already exist")
    insert_sql = 'insert into items (date, koumoku, naiyou) values (?,?,?)'
    items = [
    (get_date, get_koumoku, get_naiyou)
    ]
    c.executemany(insert_sql, items)
    conn.commit()

コード全体

import PySimpleGUI as sg
import sqlite3
from contextlib import closing

sg.theme('DarkBrown2')
dbname = 'メモアプリ.db'
conn = sqlite3.connect(dbname)

layout =[[sg.Text('メモ内容')],
         [sg.T('日付', size=(5, 1)), sg.InputText(key='date')],
         [sg.T('項目', size=(5, 1)), sg.InputText(key='koumoku')],
         [sg.T('内容', size=(5, 1)), sg.InputText(key='naiyou')],
         [sg.Button('登録',key='touroku'), sg.Button('閉じる',key='quit',button_color=('white', '#0e6251'))]]

window = sg.Window('メモアプリ_ver3.0', layout, size=(200, 150))

while True:
    event, values = window.read()
    
    if event == sg.WIN_CLOSED or event == 'quit':
        break
    elif event == 'touroku':
        get_date=values['date']
        get_koumoku=values['koumoku']
        get_naiyou=values['naiyou']
        print('入力された日付は', values['date'], 'です' )
        print('入力された項目は', values['koumoku'], 'です' )
        print('入力された内容は', values['naiyou'], 'です' )   
        
        with closing(sqlite3.connect(dbname)) as conn:
            c = conn.cursor()
            create_table = '''create table items (date TEXT,koumoku TEXT,naiyou TEXT)'''
            try:
                c.execute(create_table)
            except:
                print("database already exist")
            insert_sql = 'insert into items (date, koumoku, naiyou) values (?,?,?)'
            items = [
            (get_date, get_koumoku, get_naiyou)
            ]
            c.executemany(insert_sql, items)
            conn.commit()
            print('登録完了です' )
        
window.close()        

2回目に登録ボタンを押すとdatabase allready existとコメントが出てきてテーブルがすでに存在していることを表示してくれます。 

データは2回入ることになるのでデータベースのテーブルの中身は図のようになります。

データベースファイルはDB4Sなどで開くことができます。

ABOUT ME
Mickey@コーヒー好きエンジニア
【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|Wordpressブログを運営しながらHTML/CSSの勉強中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信