Python お金の健康

データベースに入力するアプリをPythonで開発した話【詳解編】

お客様への対応履歴を残したい
 
エクセルファイルだと画面が見にくい

 
もっといいソフトはないの?

という悩みを解決できる記事になっています。

なぜなら、私はお客様の対応履歴を
データベースで管理するアプリを開発したからです。

結論だけ言うと、

顧客の対応履歴はDBで管理すればとても楽になります。

この記事では顧客対応の履歴を入力するアプリを開発する方法を紹介します。

読み終えていただければ、

Pythonでアプリ開発ができるようになります。

※おすすめのプログラミングスクール

せっかくプログラミングができるなら

稼げるレベルまで高めませんか?

現役エンジニアが就職サポートまでしています。

無料トライアル制度もあるのでおすすめです↓

顧客管理をもっと楽にしたい!学研教室での悩み

顧客管理をもっと楽にしたい!学研教室での悩み
DSC_0070

3月からパルティフジ衣山で学研を始めます。

学研では問題集からページを割いてお子様に渡し、宿題にします。

先生からしたら、誰にいつどんな宿題を出したのか

管理するのは大変です。

さらにお子様が多くなると覚えるのも難しいでしょう。

そこでデータベースに入力するアプリを開発しました。

今回はPythonのコードを詳しく解説します。

ライブラリーのインポート

import tkinter
from  tkinter import *
from datetime import date
from tkinter import messagebox
import sqlite3  #データベースをSQL実行

ライブラリーはtkinterとsqlite3を主に使っています。

tkinterはGUIを作るもので、

誰でも操作できるような画面を作れます。

sqlite3はデータベースの管理に使います。

from import *は、モジュール内で定義されている

メソッドや変数をまとめてインポートできます。

データベースへのテーブルの作成

# データベースに接続する
conn = sqlite3.connect('gakken.db')
c = conn.cursor()
# テーブルの作成
c.execute('''CREATE TABLE IF NOT EXISTS users(name, title, date, staff, content)''')

# データベースへのアクセスが終わったら close する
conn.close()

接続はconnectメソッドを使います。

指定したDBファイルがない場合は自動で作成してくれます。

cursorメソッドはSQLiteを操作するための

「カーソル」というものを作成します。

ゲーム機で言うところのコントローラーみたいなもので、

これを使ってデータベースを操作します。

excecuteメソッドでSQLを実行します。

次にexecute()にCREATE TABLE文を渡して

usersというテーブルを作成しています。

テーブルの列名にはname、title、date、staff、contentを入れています。

また、IF NOT EXISTSを入れることで

usersテーブルがないときだけ、CREATE TABLEを実行しています。

最後にclose()するのを忘れないようにします。

基本的にデータベース操作はconnect()とclose()の間で行います。

GUI画面の作成

root = tkinter.Tk()
root.title(u'Gakken PaltyFujiKinuyama')
root.minsize(100, 100)

Tk() の呼び出しでルート要素を作成します。

このルート要素はベースとなるウィンドウそのものを表しています。

タイトルはウィンドウ上部に表示されるものです。

minsize(幅, 高さ)はウィンドウの最小値を指定します。

テキスト文章の表示

#ラベル
Static1 = tkinter.Label(text=u'お子様の名前')
Static1.pack()
#エントリー
EditBox1 = tkinter.Entry()
EditBox1.pack()
#ここで,valueにEntryの中身が入る
value1 = EditBox1.get()

#ラベル
Static2 = tkinter.Label(text=u'件名')
Static2.pack()
#エントリー
EditBox2 = tkinter.Entry()
EditBox2.pack()
#ここで,valueにEntryの中身が入る
value2 = EditBox2.get()

day = str(date.today())
#ラベル
Static3 = tkinter.Label(text=u'日付')
Static3.pack()
#エントリー
EditBox3 = tkinter.Entry()
EditBox3.insert(tkinter.END,day)
EditBox3.pack()
#ここで,valueにEntryの中身が入る
value3 = EditBox3.get()

#ラベル
Static4 = tkinter.Label(text=u'担当')
Static4.pack()
#エントリー
EditBox4 = tkinter.Entry()
EditBox4.insert(tkinter.END,'大黒知紗')
EditBox4.pack()
#ここで,valueにEntryの中身が入る
value4 = EditBox4.get()

#ラベル
Static5 = tkinter.Label(text=u'内容')
Static5.pack()
text1=tkinter.Text(root,  height=15, width=70)
text1.pack()
value5 = text1.get(END)

# Button
button1 = tkinter.Button(
    root, text='登録',
    command=import_SQL)
button1.pack()

root.mainloop()

ラベルに文字を挿入するには text オプションを使用します。

ラベルを実際にアプリに表示させるには

pack()またはplace() を使います。

pack()は自動的に上から配置してくれるもので、

place()は自分で配置や大きさを決めるものです。

Entryは、ユーザーからの入力を受け付けるものです。

実際に配置する時はpack()またはplace()を使います。

エントリーに入力された内容を受け取るには get()を使います。

また、エントリーに文字列を挿入するには insert() を使います。

例えば主な担当者がいる場合は名前を挿入しておきます。

日付も挿入しておくのが楽ですね。

短い文章はエントリーを使いますが、

長文にはテキストを使います。

テキストの作成には Text() を使います。

テキストの設置にも pack() か place() を使います。

そして、最後に登録する時はボタンを使います。

command オプションには、ボタンをクリックした時に

実行する関数を設定できます。

関数を呼び出すのも可能です。

このアプリではデータベースへの入力を関数にしています。

データベースへの入力

def import_SQL():
    #入力値を取得する
    value1 = EditBox1.get() #お子様の名前
    value2 = EditBox2.get() #件名
    value3 = EditBox3.get() #日付
    value4 = EditBox4.get() #担当
    value5 = text1.get("1.0",END) #内容
    
    # データベースに接続する
    conn = sqlite3.connect('gakken.db')
    c = conn.cursor()

    # データの挿入
    data = [
    (value1,value2,value3,value4,value5),]
    try:
        c.executemany('INSERT INTO users VALUES(?, ?, ?, ?, ?)', data)
        # 挿入した結果を保存(コミット)する
        conn.commit()
        
        for i in data:
            messagebox.showinfo('登録完了', '{0}を登録しました。'.format(i))
        
        # データベースへのアクセスが終わったら close する
        conn.close()
    except:
        pass

入力値を取得して変数に入れ、リストでまとめます。

次にデータベースに接続して挿入します。

ただ、これだけだと反応がないので

ポップアップを使って登録完了を知らせます。

以上がコードの全容でした。

コピペで使えるのでどうぞお試しください。

※おすすめのプログラミングスクール

せっかくプログラミングができるなら

稼げるレベルまで高めませんか?

現役エンジニアが就職サポートまでしています。

無料トライアル制度もあるのでおすすめです↓

ここまで読んでくださりありがとうございました。^^

-Python, お金の健康
-