業務改善や社内の取り組み(事例)として、VBAやPython等を使って今後、ツール導入を考えていきたいとお考えの方もいらっしゃるかもしれません。(小さい規模での)導入作業を繰り返し行うことで、周囲に合意を得られる形で情報が共有され、実際に導入実績につながるということもあるのかもしれません。
PythonでGUIツールを作成する際に、取り込んだExcel(csv)ファイルを操作するという方法として、前回「PySimpleGUI」ライブラリを使った例を確認しました。ライブラリを用いてデータを読み書きしたり、DB操作をしたりといった具合に、使用用途に合わせて作成していけると良いですよね。
Contents
はじめに
今回、読み込んだcsvのデータをSQLiteデータベースに登録・更新する操作について確認します。
前回同様、「PySimpleGUI」ライブラリを使ってGUIツールの使い方について簡単にサンプルで確認後、実際にcsvファイルを読み込んでDBにデータ登録・更新を行う方法についてみていきたいと思います。
添付資料にあるテーブル定義書のデータ「FileToRead.csv」をDBに登録します。
FileToRead.csv
それではまず、PySimpleGUIライブラリを使ってGUIツールの画面レイアウトを作成していきましょう。
PySimpleGUIの基礎~基本的な使い方
問題:サンプルコードを実行して画面レイアウトを作成
以下のサンプルのように(PySimpleGUIの基礎解説の参考サイトや他のWebサイトを参考にしながら)csvファイルを読み込む画面レイアウトを作成してみましょう。
・インストール
pipというPythonのパッケージ管理ツールを使って、「PySimpleGUI」をインストールします。
※Pythonインストール時に標準で入っているパッケージ以外をインストールする場合、
「pip install パッケージ名」のコマンドで、ローカル環境のPowerShellにてインストールをします。
pip install PySimpleGUI
► サンプルコード(画面レイアウト作成): layout_PySimpleGUI.py
import PySimpleGUI as sg layout = [ [sg.Text("ファイル"), sg.InputText(), sg.FileBrowse('ファイル選択', key="inputFilePath")], [sg.Button('DB登録')], [sg.Text(" ↓↓DBに登録した内容を表示:")], [sg.Multiline(default_text='', size=(60,10), border_width=2, key='tb1')], [sg.Button('クリア')] ] window = sg.Window("ファイル読込", layout) # イベントループ while True: event, values = window.read() if event == sg.WIN_CLOSED: break elif event == 'DB登録': # 処理の内容を記載 sg.popup('処理内容の実装前') elif event == ' クリア': # 処理の内容を記載 window['tb1'].Update('') window.close()
PythonでDB操作 ~ SQLiteでデータを登録・更新する
まずは、データベース操作方法の手順を理解していきましょう!
標準ライブラリに入っているsqlite3モジュールをimportします。
import sqlite3
問題
PythonでDB操作の処理を記述し、以下の家計簿テーブル(HouseholdAccount)にデータを挿入して結果を確認してみましょう。
挿入するデータ
► コード(insertSQL_sample.py)
import sqlite3 dbname = 'Household.db' conn = sqlite3.connect(dbname) cur = conn.cursor() #テーブルを作成 cur.execute(‘CREATE TABLE HouseholdAccount( AccountDate DATETIME NOT NULL, ExpenseItem VARCHAR(50) NOT NULL, Memo VARCHAR(50), DepositAmount INTEGER(7), WithdrawalAmount INTEGER(7) )’) # " HouseholdAccount "にデータを入れる cur.execute(‘INSERT INTO HouseholdAccount( AccountDate, ExpenseItem, Memo, DepositAmount, WithdrawalAmount) VALUES(“2022/5/28”,”食費”,”外食費”,0,2500),(“2022/5/28”,”交通費”,”電子マネーチャージ”,0,1000); ‘) conn.commit() cur.close() conn.close()
補足:必要に応じて、テーブル作成時に「テーブルの存在チェック」処理を追加してください。
#テーブルの存在チェック def table_isExist(conn, cur): cur.execute(""" SELECT COUNT(*) FROM sqlite_master WHERE TYPE='table' AND name='テーブル名' """) if cur.fetchone()[0] == 0: return False return True if table_isExist(conn, cur) == False: # テーブル作成処理を記載
拡張機能から「sqlite」と検索して、「SQLite」インストール
コマンドパレットを開き、「SQLite: Open Database」を選択し、作成したデータベースファイルを選択
先ほど作成したデータベースファイルを選択
表示された「SQLITE EXPLORE」から作成したテーブルを右クリックし、「Show Table」を選択
► 実行結果
Pandasとは?
Pandasとは、Pythonでデータ処理をするために作られた高機能なライブラリのことで、代表的な使い方としてSeriesやDataFrameを使ったデータの処理方法があります。
Pandasを利用するには、以下のようにインポートを行います。Asキーワードを使用してpdで呼び出せるようにします。
In
import pandas as pd
▷使用例
# 1次元データの利用 ser = pd.Series( [10, 20, 30, 40] ) ser # 2次元データの利用 df = pd.DataFrame( [10, “a”, True], [20, “b”, False], [30, “c”, False], [40, “d”, True] ) df
csvやExcelのデータを読み込んだり、列や行を削除したり、フィルターをかけて抽出をしたりといったExcelやデータベース言語のSQLでできることがPandasの機能にはあります。
PandasのDataFrameを利用する方法
先程の家計簿テーブル(HouseholdAccount)にPandasのDataFrameを利用して添付資料の「FileToRead.csv」のデータを挿入してみましょう。
► コード(insertSQL_dataframe.py)
import sqlite3 import pandas as pd # pandasでcsvファイルの内容を読み込む # csvファイルの、1列目にAccountDate, 2列目にExpenseItem, 3列目にMemo, 4列目にDepositAmount, 5列目にWithdrawalAmountが入っているとする df = pd.read_csv('FileToRead.csv', encoding='SHIFT_JIS') dbname = 'Household.db' conn = sqlite3.connect(dbname) cur = conn.cursor() # 名前がHouseholdのDBに、読み込んだcsvファイルのデータをSQLに書き込む df.to_sql('HouseholdAccount', conn, if_exists='replace', index = None) conn.commit() # 作成したデータベースを1行ずつ見る select_sql = 'SELECT * FROM HouseholdAccount' for row in cur.execute(select_sql): print(row) cur.close() conn.close()
► 実行結果
課題:画面レイアウトの「DB登録」ボタン押下時の処理を実装
では、これまで確認したDB(SQLite)にデータを登録する方法をもとに、作成した画面レイアウトでDB登録を押下した際の処理を実装してみましょう!
問題【課題】:DB操作処理の実装~作成した画面レイアウトの「DB登録」ボタン押下時の処理を記述
「DB登録」ボタンを押下した際の処理を実装してみましょう。
====================================
業務でPythonを使ってツールを作ったり、自動化処理を記述したりする機会がある方もいらっしゃると思います。自身のPCでVisual Studio Codeを使って簡単に今回のサンプルを試すことができますので、この機会にPythonに触れる時間を作っていただけると嬉しい限りです。
以上となります。