From e655b72a5cd0aac8aae140662f011daa85a3999c Mon Sep 17 00:00:00 2001 From: wangsiyuan <2392948297@qq.com> Date: Fri, 29 Dec 2023 11:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20database=5Fmanager.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/database_manager.py | 46 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/db/database_manager.py b/db/database_manager.py index 9c5c821..b203786 100644 --- a/db/database_manager.py +++ b/db/database_manager.py @@ -31,6 +31,22 @@ class DatabaseManager: cursor.close() conn.close() + def executemany(self, query, params_list): + conn = self.pool.get_connection() + try: + cursor = conn.cursor() + cursor.executemany(query, params_list) # 使用executemany代替execute + conn.commit() # 提交事务 + return cursor.rowcount # 返回受影响的行数 + except Exception as e: + # 可以在这里添加错误处理逻辑,例如打印错误日志、回滚事务等 + print("An error occurred: ", e) + conn.rollback() + return None + finally: + cursor.close() + conn.close() + def user_exists(self, phone_number): sql = "SELECT 1 FROM user WHERE number=%s LIMIT 1" result = self.fetch(sql, (phone_number,)) @@ -76,12 +92,14 @@ class DatabaseManager: def get_current_teacher_courses(self, teacher_number): # 使用INNER JOIN连接teacher_class_course表和course表 sql = """ - SELECT + SELECT + c.course_id, c.course_name, c.course_code, c.credits, tcc.class_name, - m.major + m.major, + m.major_id FROM teacher_class_course tcc JOIN @@ -128,6 +146,7 @@ WHERE return self.execute(sql, data) def get_course_name(self, student_number, day_of_week, period_id): + print(f"student_number: {student_number}, day_of_week: {day_of_week}, period_id: {period_id}") # 从student表获取class_name sql_student = "SELECT class_name FROM student WHERE student_number = %s;" class_name = self.fetch(sql_student, (student_number,))[0]['class_name'] @@ -189,3 +208,26 @@ WHERE time = get_time_by_ids(id) data.append({"course_name": course_name, "time": time}) return data + + def teacher_sign_in(self, course_id, course_name, class_name, major_id, date, status): + student_sql = "SELECT student_number FROM student WHERE class_name = %s AND major_id = %s;" + student_sql_result = self.fetch(student_sql, (class_name, major_id)) + + # 检查是否有学生编号被返回 + if student_sql_result: + values_list = [] + for student in student_sql_result: + # 对于每个学生编号,创建一条记录的值元组 + student_number = student['student_number'] + values_list.append((student_number, course_id, course_name, date, status)) + + # 构建一次性插入多条记录的SQL语句 + attendance_sql = "INSERT INTO attendance_record (student_number, course_id, course_name, date, status) VALUES (%s, %s, %s, %s, %s)" + + # 使用executemany一次性插入多条记录 + result = self.executemany(attendance_sql, values_list) + print(result) + return {"msg": "班级签到成功,签到人数:" + str(result)} + else: + # 如果没有学生编号,可能需要处理错误或记录日志 + return {"msg": "当前班级专业没有学生"}