From f218f2ed1f843cd7669e186fc066daee3c64d725 Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Mon, 6 Nov 2023 13:52:54 +0700 Subject: [PATCH] database connection --- access_control_python/database.py | 71 +++++++++++++++++++++++++++++++ access_control_python/main.py | 6 ++- 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 access_control_python/database.py diff --git a/access_control_python/database.py b/access_control_python/database.py new file mode 100644 index 0000000..58f52d2 --- /dev/null +++ b/access_control_python/database.py @@ -0,0 +1,71 @@ +import mysql.connector as sql +from dataclasses import dataclass + +HOST = "192.168.0.239" +USER = "detector" +PASSWORD = "n9ZvEmZ7xSKE7cPx" + +@dataclass +class Person(): + id: int + name: str + surname: str + imagefile: str + +@dataclass +class Student(Person): + pass + +@dataclass +class Parent(Person): + pass + +class database: + db = None + cursor = None + def __init__(self) -> None: + self.db = sql.connect(host=HOST,user =USER,password=PASSWORD,database="face_detect") + self.cursor = self.db.cursor() + pass + def get_student_info(self, filename: str) -> Student: + statement = (f'SELECT * FROM students WHERE imagefile=\"{filename}\"') + self.cursor.execute(statement) + result = self.cursor.fetchone() + if len(result) == 0: + return None + student = Student(result[0],result[1],result[2],result[3]) + return student + def get_parent_info(self, filename: str): + statement = (f'SELECT * FROM parents WHERE imagefile=\"{filename}\"') + self.cursor.execute(statement) + result = self.cursor.fetchone() + if len(result) == 0: + return None + parent = Parent(result[0],result[1],result[2],result[3]) + return parent + def check_relationship_file(self, student_filename: str, parent_filename: str): + statement = f'SELECT id FROM `parent-student-relations` psr WHERE psr.student_id = (SELECT id FROM students WHERE students.imagefile = \"{student_filename}\") AND psr.parent_id = (SELECT id FROM parents WHERE parents.imagefile = "{parent_filename}")' + self.cursor.execute(statement) + return self.cursor.fetchone() != None + def check_relationship(self, student: Student, parent: Parent): + statement = f'SELECT id FROM `parent-student-relations` psr WHERE psr.student_id = {student.id} AND psr.parent_id = {parent.id}' + self.cursor.execute(statement) + return self.cursor.fetchone() != None + def log_access_student_file(self, student_filename: str, parent_filename: str): + statement = f'INSERT INTO face_detect.`access-log` (id, student_id, parent_id, `timestamp`) VALUES(NULL, (SELECT id FROM students WHERE students.imagefile = \"{student_filename}\"), (SELECT id FROM parents WHERE parents.imagefile = "{parent_filename}"), NULL)' + self.cursor.execute(statement) + self.db.commit() + def log_access_parent_file(self, parent_filename: str): + statement = f'INSERT INTO face_detect.`access-log` (id, student_id, parent_id, `timestamp`) VALUES(NULL, NULL, (SELECT id FROM parents WHERE parents.imagefile = "{parent_filename}"), NULL)' + self.cursor.execute(statement) + self.db.commit() + def log_access_student(self, student: Student, parent: Parent): + statement = f'INSERT INTO face_detect.`access-log` (id, student_id, parent_id, `timestamp`) VALUES(NULL, {student.id}, {parent.id}, NULL)' + self.cursor.execute(statement) + self.db.commit() + def log_access_parent(self, parent: Parent): + statement = f'INSERT INTO face_detect.`access-log` (id, student_id, parent_id, `timestamp`) VALUES(NULL, NULL, {parent.id}, NULL)' + self.cursor.execute(statement) + self.db.commit() + def fetch_log() -> list: + pass diff --git a/access_control_python/main.py b/access_control_python/main.py index 407475f..340af18 100644 --- a/access_control_python/main.py +++ b/access_control_python/main.py @@ -3,12 +3,14 @@ import threading import time import face_processing as fp from access_control import access_control +from database import database, Student, Parent -SERIAL_PORT = "COM12" +SERIAL_PORT_STM32 = "COM12" +SERIAL_PORT_DISPLAY = "COM15" CAMERA_INDEX = 0 cam = cv2.VideoCapture(CAMERA_INDEX) -stm32 = access_control(SERIAL_PORT) +stm32 = access_control(SERIAL_PORT_STM32) global img global frame_ready