经过上次,我们已经学会使用python导入pymysql然后连接数据库。而今天我们想使用pymysql来构建一个⾯向对象版学员管理系统,能够连接数据库,对数据进行增删改查等操作。
一.首先我们导入各个模块,与数据库进行连接。
import threading # 导入模块
import pymysql as pymysql # 导入模块
# 获取数据库连接对象
db = pymysql.connect(host='localhost', user='root', password='123456', database='students')
cursor = db.cursor() # 创建游标对象
二.我们创建类,编写学院管理系统入口函数。
class StudentManager(object):
def run(self):
# 1. 加载文件里面的学员数据
while True:
# 2. 显示功能菜单
self.show_menu()
# 3. 用户输入目标功能序号
menu_num = int(input('请输入您需要的功能序号:'))
# 4. 根据用户输入的序号执行不同的功能 -- 如果用户输入1,执行添加
if menu_num == 1:
# 添加学员
self.add_student()
elif menu_num == 2:
# 删除学员
self.del_student()
elif menu_num == 3:
# 修改学员信息
self.modify_student()
elif menu_num == 4:
# 查询学员信息
self.search_student()
elif menu_num == 5:
# 显示所有学员信息
self.show_student()
elif menu_num == 6:
# 保存学员信息
self.save_student()
elif menu_num == 7:
# 退出系统 -- 退出循环
break
三.实现各个函数的功能。
1.主页面显示
@staticmethod
def show_menu():
print('请选择如下功能:')
print('1:添加学员')
print('2:删除学员')
print('3:修改学员信息')
print('4:查询学员信息')
print('5:显示所有学员信息')
print('6:保存学员信息')
print('7:退出系统')
2.添加学员
# 2.2 添加学员
def add_student(self):
# 1. 用户输入姓名、性别、手机号
name = input('请输入您的姓名:')
gender = input('请输入您的性别:')
tel = input('请输入您的手机号:')
# SQL 插入语句
sql = "INSERT INTO STU(NAME,gender, tel)VALUES (%s,%s,%s)"
value = (name, gender, tel)
# sql = f"""INSERT INTO stu (name, gender, tel) VALUES ("{name}","{gender}","{tel}")"""
try:
# 执行sql语句
cursor.execute(sql, value)
# 提交到数据库执行
db.commit()
print("添加成功")
except:
# 如果发生错误则回滚
db.rollback()
3.删除学员
# 2.3 删除学员
def del_student(self):
# 1. 用户输入目标学员姓名
del_name = input('请输入要删除的学员姓名:')
# SQL 删除语句
sql = f"""DELETE FROM STU WHERE NAME='{del_name}'"""
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 发生错误时回滚
db.rollback()
4. 修改学员信息
# 2.4 修改学员信息
def modify_student(self):
# 1. 用户输入目标学员姓名
modify_name = input('请输入要修改的学员姓名:')
# sql语句,用于判断需要修改的学员是否存在
sql = f"""
SELECT 1 FROM stu WHERE name="{modify_name}";
"""
cursor.execute(sql) # 执行sql语句
student = cursor.fetchall() # 返回查询结果集
if student: # 如果该学员存在
new_name = input("请输入姓名:") # 输入修改信息
new_gender = input("请输入性别:") # 输入修改信息
new_tel = input("请输入手机号:") # 输入修改信息
# sql语句
sql2 = f"""
UPDATE stu SET name = "{new_name}",gender="{new_gender}",tel="{new_tel}" WHERE name="{new_name}";
"""
cursor.execute(sql2) # 执行sql语句
db.commit() # 提交修改
else:
print('查无此人') # 打印提示语句
print('学生修改成功') # 打印提示语句
5. 查询学员信息
# 2.5 查询学员信息
def search_student(self):
# 1. 用户输入目标学员姓名
search_name = input('请输入您要搜索的学员姓名:')
# SQL 查询语句
sql = "SELECT * FROM STU WHERE NAME=%s"
value = (search_name,) # 变量值
try:
# 执行SQL语句
cursor.execute(sql, value)
# 获取所有记录列表
results = cursor.fetchall()
print("数据查询成功!")
for row in results: # 遍历数据集
name = row[0]
gender = row[1]
tel = row[2]
# 打印结果
print("姓名:%s,性别:%s,手机号:%s" % (name, gender, tel))
except:
print("查无此人")
6. 显示所有学员信息
# 2.6 显示所有学员信息
def show_student(self):
# 1. 打印表头
print('姓名\t性别\t手机号')
# sql语句
sql = "SELECT * FROM STU"
try:
cursor.execute(sql) # 执行sql语句
results = cursor.fetchall() # 返回结果集
for row in results: # 遍历结果集
# 打印结果
name = row[0]
gender = row[1]
tel = row[2]
print('姓名:%s,性别:%s,手机号:%s' % (name, gender, tel))
except pymysql.Error as e:
print("数据显示失败:" + str(e))
db.close()
7. 保存学员信息
# 2.7 保存学员信息
def save_student(self):
print("保存成功!") # 打印提示信息
t2 = threading.Timer(1, function=self.save_student) # 设置定时器
t2.start() # 开启线程
t2.cancel()
通过这些函数,我们就基本的实现了学员管理系统的增删改查等操作。