PythonのTkinterとSuica(NFC)で出退勤(その1-イントロダクションとDB)
こんにちは
Suicaを使って出退勤の打刻したいですよね。
え?今はリモートのご時世?Webで出勤ボタンぽちっとな?
いやいやまさか。
PythonのTkinterとPaSoRi(電気屋で3000円くらいで売ってるFeliCaを読み取る機器)を使って非常にシンプルな出退勤システムを作ります。
タッチパネル付きRaspberry Piで実装したかったんですが、タッチパネルの反応が悪くて断念、Windowsで実装します。
今回はシステムのイメージ図とSQLite3を使ったDB・テーブル作成をします。
※Pythonのversionは3.7.7です
■イメージ図(機能が3つあります)
1.FeliCa登録
2.打刻
3.FeliCaの一覧や打刻履歴の一覧の表示
これを目標に作ります
■DB(SQLite3)
SQLite3はPython標準で入っているので、別途インストールの必要はありません。
テーブルは2つ すごくシンプルですね
1.nfcテーブル
id |
INTEGER
|
AUTOINCREMENT |
idm |
VARCHAR
|
unique
|
name |
VARCHAR
|
NOT NULL
|
※idmはFeliCaを識別する一意のid
2.timecardテーブル
id |
INTEGER
|
AUTOINCREMENT |
idm |
VARCHAR
|
NOT NUL |
attendanceTime
|
DATE
|
NOT NULL
|
leaveWorkTime
|
DATE
|
–
|
外部キーがnfcテーブルのidm
テーブルを作りましょう
import os
import sqlite3
class CreateDatabase():
current_dir = os.getcwd()
print(os.getcwd() )
print(current_dir)
dbname = current_dir + '\database.db'
conn = sqlite3.connect(dbname)
# 外部キー制約の使用を有効にする
conn.execute("PRAGMA foreign_keys = 1")
try:
# timecardテーブル(タイムカードテーブル)削除(テーブルを削除する場合はコメントを外す)
# sql = "Drop Table timeCard"
# conn.execute(sql)
# nfcテーブル(ユーザーマスタ)削除(テーブルを削除する場合はコメントを外す)
# sql = "Drop Table nfc"
# conn.execute(sql)
# nfcテーブル(ユーザーマスタ)作成
sql = "CREATE TABLE nfc (id INTEGER PRIMARY KEY AUTOINCREMENT, idm VARCHAR(20) unique, name VARCHAR(40) NOT NULL);"
conn.execute(sql)
# timecardテーブル(タイムカードテーブル)作成
sql = "CREATE TABLE timeCard (id INTEGER PRIMARY KEY AUTOINCREMENT, idm VARCHAR(20) NOT NULL, attendanceTime DATE NOT NULL, leaveWorkTime DATE, FOREIGN KEY(idm) REFERENCES nfc(idm));"
conn.execute(sql)
#テーブルの存在確認
sql = "select * from sqlite_master where type='table'"
for t in conn.execute(sql):
print(t)
finally:
conn.close()
def main():
CreateDatabase()
if __name__ == "__main__":
main()
まだ見れないけど、select文
import os
import sqlite3
class ReadDatabase():
current_dir = os.getcwd()
print(os.getcwd() )
print(current_dir)
dbname = current_dir + '\database.db'
conn = sqlite3.connect(dbname)
try:
# nfcテーブル(ユーザーマスタ)レコードの確認
sql = "select * from nfc"
print('nfcテーブル')
for t in conn.execute(sql):
print(t)
# timecardテーブル(タイムカードテーブル)レコードの確認
sql = "select * from timeCard"
print('timecardテーブル')
for t in conn.execute(sql):
print(t)
finally:
conn.close()
def main():
ReadDatabase()
if __name__ == "__main__":
main()
これでDBは終わり
次は管理画面(Felicaの登録・検索、打刻一覧)をつくりましょうか