python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇

  • 前言
  • 一、主界面的样式
  • 二、学生信息的增,删,改,查
    • 1.增加学生信息
    • 2.删除学生信息
    • 3.更改学生信息
    • 4.查询学生信息
    • 5.其他功能
      • 查询全部学生信息
      • 清空学生信息
      • 查询增加的学生信息
  • 总结

前言

在我的上一篇博客中,我们已经讲了登录,注册及找回密码的操作,接下来我将与大家分享一哈该学生信息管理系统中的增,删,改,查部分的操作和实现方法。
如图所示:


接下来让我们开始吧!

一、主界面的样式

从上图中可以看到我采用了左右分布的架构,即菜单栏在左侧,子页面在右侧,我们先来讲一下这个界面的实现过程。其实这个样式我也是在网上寻找到的,然后根据自己的需要进行进一步的更改(由于时间久远,我也忘记了出处,侵删)。
主要代码如下:

class MainUi(QtWidgets.QMainWindow):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.setFixedSize(960, 700)self.main_widget = QtWidgets.QWidget()  # 创建窗口主部件self.main_layout = QtWidgets.QGridLayout()  # 创建主部件的网格布局self.main_widget.setLayout(self.main_layout)  # 设置窗口主部件布局为网格布局self.left_widget = QtWidgets.QWidget()  # 创建左侧部件self.left_widget.setObjectName('left_widget')self.left_layout = QtWidgets.QGridLayout()  # 创建左侧部件的网格布局层self.left_widget.setLayout(self.left_layout)  # 设置左侧部件布局为网格self.right_widget = QStackedWidget()self.right_widget.setObjectName('right_widget')self.right_layout = QtWidgets.QGridLayout()self.right_widget.setLayout(self.right_layout)  # 设置右侧部件布局为网格self.main_layout.addWidget(self.left_widget, 0, 0, 12, 2)  # 左侧部件在第0行第0列,占8行3列self.main_layout.addWidget(self.right_widget, 0, 2, 12, 10)  # 右侧部件在第0行第3列,占8行9列self.setCentralWidget(self.main_widget)  # 设置窗口主部件self.left_close = QtWidgets.QPushButton("")  # 关闭按钮self.left_close.clicked.connect(self.close1)  # 关闭窗口self.left_visit = QtWidgets.QPushButton("")  # 空白按钮self.left_visit.clicked.connect(self.back)  # 关闭窗口self.left_mini = QtWidgets.QPushButton("")  # 最小化按钮self.left_mini.clicked.connect(self.showMinimized)  # 最小化窗口self.left_label_1 = QtWidgets.QPushButton("信息更改")self.left_label_1.setObjectName('left_label')self.left_label_2 = QtWidgets.QPushButton("成绩统计")self.left_label_2.setObjectName('left_label')self.left_label_3 = QtWidgets.QPushButton("帮助与用户")self.left_label_3.setObjectName('left_label')self.left_button_1 = QtWidgets.QPushButton(qtawesome.icon('fa.address-card-o', color='white'), "信息查找")self.left_button_1.setObjectName('left_button')self.left_button_1.clicked.connect(self.left_button1_clicked2)self.left_button_2 = QtWidgets.QPushButton(qtawesome.icon('fa.trash-o', color='white'), "信息删除")self.left_button_2.setObjectName('left_button')self.left_button_2.clicked.connect(self.left_button1_clicked3)self.left_button_3 = QtWidgets.QPushButton(qtawesome.icon('fa.pencil-square-o', color='white'), "信息修改")self.left_button_3.setObjectName('left_button')self.left_button_3.clicked.connect(self.left_button1_clicked4)self.left_button_4 = QtWidgets.QPushButton(qtawesome.icon('fa.plus-square-o', color='white'), "信息增加")self.left_button_4.setObjectName('left_button')self.left_button_4.clicked.connect(self.left_button1_clicked5)self.left_button_5 = QtWidgets.QPushButton(qtawesome.icon('fa.line-chart', color='white'), "成绩排名")self.left_button_5.setObjectName('left_button')self.left_button_5.clicked.connect(self.left_button1_clicked6)self.left_button_6 = QtWidgets.QPushButton(qtawesome.icon('fa.bar-chart', color='white'), "学科统计")self.left_button_6.setObjectName('left_button')self.left_button_6.clicked.connect(self.left_button1_clicked7)self.left_button_7 = QtWidgets.QPushButton(qtawesome.icon('fa.user-o', color='white'), "个人中心")self.left_button_7.setObjectName('left_button')self.left_button_7.clicked.connect(self.left_button1_clicked)self.left_button_8 = QtWidgets.QPushButton(qtawesome.icon('fa.pie-chart', color='white'), "成绩分布")self.left_button_8.setObjectName('left_button')self.left_button_8.clicked.connect(self.left_button1_clicked8)self.left_button_9 = QtWidgets.QPushButton(qtawesome.icon('fa.question', color='white'), "遇到问题")self.left_button_9.setObjectName('left_button')self.left_button_9.clicked.connect(self.left_button1_clicked1)self.left_xxx = QtWidgets.QPushButton(" ")self.left_layout.addWidget(self.left_mini, 0, 2, 1, 1)self.left_layout.addWidget(self.left_visit, 0, 1, 1, 1)self.left_layout.addWidget(self.left_close, 0, 0, 1, 1)self.left_layout.addWidget(self.left_label_1, 1, 0, 1, 3)self.left_layout.addWidget(self.left_button_1, 2, 0, 1, 3)self.left_layout.addWidget(self.left_button_2, 3, 0, 1, 3)self.left_layout.addWidget(self.left_button_3, 4, 0, 1, 3)self.left_layout.addWidget(self.left_label_2, 6, 0, 1, 3)self.left_layout.addWidget(self.left_button_4, 5, 0, 1, 3)self.left_layout.addWidget(self.left_button_5, 7, 0, 1, 3)self.left_layout.addWidget(self.left_button_6, 8, 0, 1, 3)self.left_layout.addWidget(self.left_label_3, 10, 0, 1, 3)self.left_layout.addWidget(self.left_button_7, 11, 0, 1, 3)self.left_layout.addWidget(self.left_button_8, 9, 0, 1, 3)self.left_layout.addWidget(self.left_button_9, 12, 0, 1, 3)

可以看到,主要是通过QtWidgets中的组件去进行左侧样式的分布设计。那么什么是QtWidgets?大家可以看看这篇博客: Qt开发:Qt Widgets模块——简介.讲的十分详细了。在这里我也不做过多的赘述,大致布局也是与登录界面相似的——取消了窗口框,用按钮代替等。当然这个时候也会出现登录界面一样的问题,相关问题可以看我的上一篇博客: python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细)——登录,注册及找回密码篇.当然每个按钮都通过clicked.connect连接了一个子事件,从而实现页面的跳转。代码如下:

# 导入数据库def back(self):self.right_widget.setCurrentIndex(0)#个人中心def left_button1_clicked(self):self.right_widget.setCurrentIndex(1)#遇到问题def left_button1_clicked1(self):self.right_widget.setCurrentIndex(2)#信息查询def left_button1_clicked2(self):self.right_widget.setCurrentIndex(3)#信息删除def left_button1_clicked3(self):self.right_widget.setCurrentIndex(4)# 信息修改def left_button1_clicked4(self):self.right_widget.setCurrentIndex(5)# 信息增加def left_button1_clicked5(self):self.right_widget.setCurrentIndex(6)# 成绩排名def left_button1_clicked6(self):self.right_widget.setCurrentIndex(7)# 学科统计def left_button1_clicked7(self):self.right_widget.setCurrentIndex(8)# 成绩分布def left_button1_clicked8(self):self.right_widget.setCurrentIndex(9)

为了操作的方便,我还设置了一个讲表格的信息导入到数据库的功能,如上图所示。代码如下:

#默认页面self.form1 = QWidget()self.right_widget.addWidget(self.form1)self.formLayout1 = QtWidgets.QGridLayout(self.form1)self.right_bar_widget = QtWidgets.QWidget()  # 右侧顶部搜索框部件self.right_bar_layout = QtWidgets.QGridLayout()  # 右侧顶部搜索框网格布局self.right_bar_widget.setLayout(self.right_bar_layout)self.right_bar_widget1 = QtWidgets.QWidget()  # 右侧顶部搜索框部件self.right_bar_layout1 = QtWidgets.QGridLayout()  # 右侧顶部搜索框网格布局self.right_bar_widget1.setLayout(self.right_bar_layout1)self.right_folder_button22 = QtWidgets.QPushButton(qtawesome.icon('fa.folder', color='GoldenRod'), "")self.right_folder_button22.setStyleSheet("QPushButton{color:highlight}""QPushButton:hover{color:white}""QPushButton{background-color:rgb(0,191,255)}""QPushButton{border:none}""QPushButton{border-radius:10px}""QPushButton{padding:5px 6px}""QPushButton{font-size:14pt}")self.right_folder_button22.setObjectName('right_search_button')self.right_folder_button22.setFont(qtawesome.font('fa', 16))self.right_folder_button22.clicked.connect(self.right_folder_button_clicked31)self.right_folder_button22.setFixedSize(30, 30)  # 设置按钮大小self.right_folder_button11 = QtWidgets.QPushButton("导入数据库")self.right_folder_button11.setObjectName('right_search_button')self.right_folder_button11.setFont(qtawesome.font('fa', 16))self.right_folder_button11.clicked.connect(self.right_folder_button_clicked51)self.right_folder_button11.setFixedSize(140, 40)  # 设置按钮大小self.right_folder_button11.setStyleSheet("QPushButton{color:highlight}""QPushButton:hover{color:white}""QPushButton{background-color:rgb(0,191,255)}""QPushButton{border:2px}""QPushButton{border-radius:10px}""QPushButton{padding:5px 6px}""QPushButton{font-size:14pt}")self.right_folder_button111 = QtWidgets.QPushButton("清空数据库")self.right_folder_button111.setObjectName('right_search_button')self.right_folder_button111.setFont(qtawesome.font('fa', 16))self.right_folder_button111.clicked.connect(self.view_data23)self.right_folder_button111.setFixedSize(140, 40)  # 设置按钮大小self.right_folder_button111.setStyleSheet("QPushButton{color:highlight}""QPushButton:hover{color:white}""QPushButton{background-color:rgb(0,191,255)}""QPushButton{border:2px}""QPushButton{border-radius:10px}""QPushButton{padding:5px 6px}""QPushButton{font-size:14pt}")self.right_bar_widget_folder_input9 = QtWidgets.QLineEdit()self.right_bar_widget_folder_input9.setPlaceholderText("填入或选择需要上传的文件夹")self.right_bar_widget_folder_input9.setObjectName("right_input_item")self.right_bar_widget_folder_input9.setStyleSheet('''QLineEdit{border:1px solid gray;width:10px;border-radius:10px;padding:2px 4px;}''')self.user11 = QtWidgets.QLabel("数据的导入")self.user11.setFont(qtawesome.font('fa', 22))self.right_bar_layout1.addWidget(self.user11, 0, 0,1,10)self.recommend_button_11 = QtWidgets.QToolButton()self.recommend_button_11.setIcon(QtGui.QIcon('./5.jpg'))self.recommend_button_11.setIconSize(QtCore.QSize(1000, 1000))self.right_bar_layout1.addWidget(self.recommend_button_11, 0, 0, 10, 10)self.recommend_button_11.setStyleSheet('''QToolButton{border:none;color:black;}QToolButton:hover{color:white}''')self.right_bar_layout1.addWidget(self.right_folder_button22, 8, 1, 20, 6)self.right_bar_layout1.addWidget(self.right_folder_button11, 10, 3, 20,1)self.right_bar_layout1.addWidget(self.right_folder_button111, 10, 5, 20, 1)self.right_bar_layout1.addWidget(self.right_bar_widget_folder_input9, 8, 2, 20, 6)self.formLayout1.addWidget(self.right_bar_widget1, 0, 0, 9, 0)

以上主要是导入数据库的界面样式设计,以下是按钮功能的实现。通过getOpenFileName去进行表格文件的选取,然后获取文件的路径名称setText显示到界面上。导入数据库方面主要是通过pymysql进行数据库的连接,在此需要注意相关的数据库的配置信息。在数据库方面不太了解的同学可以自行百度,之后就是利用xlrd循环遍历读取表格中的数据,利用“insert into student”先进行表头的设置,最后将循环遍历的信息一行一行的写入数据库中,注意:在使用完数据库一定要关闭数据库,不然会出现数据库过载等错误。

#默认页面的路径选择def right_folder_button_clicked31(self):fileName, fileType = QtWidgets.QFileDialog.getOpenFileName(self, "选取文件", os.getcwd(),"All Files(*);;Text Files(*.txt)")demo.right_bar_widget_folder_input9.setText(fileName)#导入数据库def right_folder_button_clicked51(self):try:file = open("8.txt", 'w').close()ap = demo.right_bar_widget_folder_input9.text()if ap == '':QMessageBox.information(self, '错误', '输入不能为空', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)else:book = xlrd.open_workbook(ap)sheet = book.sheet_by_index(0)# 建立一个MySQL连接conn = pymysql.connect(host='localhost',user='root',passwd='',db='student',charset='utf8')# 获得游标cur = conn.cursor()# 创建插入SQL语句query = 'insert into student(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'# 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题行for r in range(0, sheet.nrows):学号 = sheet.cell(r, 0).value姓名 = sheet.cell(r, 1).value专业 = sheet.cell(r, 2).value班级 = sheet.cell(r, 3).value高级程序语言 = sheet.cell(r, 4).valuepython编程 = sheet.cell(r, 5).value数据库原理 = sheet.cell(r, 6).value数据结构与算法 = sheet.cell(r, 7).value数学分析 = sheet.cell(r, 8).value高等数学 = sheet.cell(r, 9).value网络爬虫 = sheet.cell(r, 10).value数据可视化 = sheet.cell(r, 11).value数据挖掘 = sheet.cell(r, 12).value数据分析 = sheet.cell(r, 13).valuewith open('8.txt', 'a') as f3:f3.write(sheet.cell(r, 0).value + " " + sheet.cell(r, 1).value+"\n")values = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句cur.execute(query, values)cur.close()conn.commit()conn.close()QMessageBox.information(self, '成功', '导入成功', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)except:QMessageBox.information(self, '错误', '导入失败', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)

这样就大致完成了表格数据向数据库的转换,方便了我们的使用。

二、学生信息的增,删,改,查

1.增加学生信息

关于学生信息的增加界面如下:

界面的样式就不做过的赘述了与之前的都差不多,这里主要讲一下,如何实现数据的增加以及如图所示的表格实现方式。具体代码如下:

#增加def view_data5(self):global dbdb = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')self.model = QtSql.QSqlTableModel()self.right_batch_result_listView3.setModel(self.model)self.model.setTable('student')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据if self.model:self.model.insertRows(self.model.rowCount(), 1)

如代码中所示,这次的数据库连接我采用的是QMYSQL进行连接的,但是使用这种连接数据库会存在很多的问题——Driver not loaded,这是我在连接时出现的,在网上查询了很多资料都存在着不同的答案而且很复杂,大致意思应该就是说Qt在连接mysql的时候是非常不友好的,存在各种版本问题和不兼容的情况。最后解决方法如下:
将文件C:\Program Files\mysql-5.7.26-win32\lib\libmysql.dll放入文件夹
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyQt5\Qt\bin
大致就是需要找到你下载的mysql库中的libmysql.dll文件将它放入你下载好的pyqt5的bin文件中去。这样就能解决这个问题了,但是或许你这样做了,但是依旧不能解决,那就有可能是你的pyqt5的版本不兼容等问题了,可以选择重新下载pyqt5等方法。
再来讲讲这里的增加功能,我先是将整个数据库中的信息导出放入我设置好的表格中,然后利用insertRows为这个表格增加了一行,利用setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) 对表格设定可以修改其中的数据,从而再利用一下代码:

#增加中的完成def view_data51(self):try:index = self.model.index(self.model.rowCount() - 1, 0)  # 调用model的index方法获取行和列对应项的索引data12 = index.data()index = self.model.index(self.model.rowCount() - 1, 1)  # 调用model的index方法获取行和列对应项的索引data13 = index.data()index = self.model.index(self.model.rowCount() - 1, 2)  # 调用model的index方法获取行和列对应项的索引data1 = index.data()index = self.model.index(self.model.rowCount() - 1, 3)  # 调用model的index方法获取行和列对应项的索引data2 = index.data()index = self.model.index(self.model.rowCount() - 1, 4)  # 调用model的index方法获取行和列对应项的索引data3 = index.data()index = self.model.index(self.model.rowCount() - 1, 5)  # 调用model的index方法获取行和列对应项的索引data4 = index.data()index = self.model.index(self.model.rowCount() - 1, 6)  # 调用model的index方法获取行和列对应项的索引data5 = index.data()index = self.model.index(self.model.rowCount() - 1, 7)  # 调用model的index方法获取行和列对应项的索引data6 = index.data()index = self.model.index(self.model.rowCount() - 1, 8)  # 调用model的index方法获取行和列对应项的索引data7 = index.data()index = self.model.index(self.model.rowCount() - 1, 9)  # 调用model的index方法获取行和列对应项的索引data8 = index.data()index = self.model.index(self.model.rowCount() - 1, 10)  # 调用model的index方法获取行和列对应项的索引data9 = index.data()index = self.model.index(self.model.rowCount() - 1, 11)  # 调用model的index方法获取行和列对应项的索引data10 = index.data()index = self.model.index(self.model.rowCount() - 1, 12)  # 调用model的index方法获取行和列对应项的索引data11 = index.data()index = self.model.index(self.model.rowCount() - 1, 13)  # 调用model的index方法获取行和列对应项的索引data = index.data()conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()  # 获取一个游标# 创建插入SQL语句query = 'insert into student(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'# 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题行学号 = data12姓名 = data13专业 = data1班级 = data2高级程序语言 = data3python编程 = data4数据库原理 = data5数据结构与算法 = data6数学分析 = data7高等数学 = data8网络爬虫 = data9数据可视化 = data10数据挖掘 = data11数据分析 = datavalues = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句cur.execute(query, values)cur.close()conn.commit()conn.close()with open('8.txt', 'a+') as f: # 注意这里a+是可写可追加f.write(data12 + " " +data13+'\n')QMessageBox.information(self, '成功', '增加成功', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)except:QMessageBox.information(self, '错误', '操作错误', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)

通过获取索引的方法获取增加行的数据然后将其以此增加到数据库中,这样就完成了数据的增加功能。

2.删除学生信息

界面样式如下:

界面布局与设计就不做过多的赘述了,我们来讲讲其中的功能是如何实现的。代码如下:

 #删除def view_data3(self):account_dict = {}f = open("8.txt", 'r+')for line in f:(keys, value) = line.strip().split()account_dict[keys] = valueaccount_keys = list(account_dict.keys())account_value = list(account_dict.values())gettxt1 = self.right_bar_widget_folder_input112.text()if gettxt1 == '':QMessageBox.information(self, '错误', '输入不能为空', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)else:if gettxt1 in account_keys:conn1 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur1 = conn1.cursor()  # 获取一个游标sql_select1 = "select * from student where 学号='{}'".format(gettxt1)  # 定义查询cur1.execute(sql_select1)  # 执行查询data = cur1.fetchall()  # 获取查询到数据query = 'insert ignore into student2(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'for r in range(1):学号 = data[0][0]姓名 = data[0][1]专业 = data[0][2]班级 = data[0][3]高级程序语言 = data[0][4]python编程 = data[0][5]数据库原理 = data[0][6]数据结构与算法 = data[0][7]数学分析 = data[0][8]高等数学 = data[0][9]网络爬虫 = data[0][10]数据可视化 = data[0][11]数据挖掘 = data[0][12]数据分析 = data[0][13]values = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句cur1.execute(query, values)conn1.commit()  # 提交事务cur1.close()  # 关闭游标conn1.close()  # 释放数据库资源在这里插入代码片conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()  # 获取一个游标sql_select = "DELETE from student where 学号='{}'".format(gettxt1)  # 定义查询cur.execute(sql_select)  # 执行查询conn.commit()cur.close()conn.close()db = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')if not db.open():  # 判断数据库是否打开print(db.lastError().text())  # 打印操作数据库时出现的错误return Falseelse:print("连接成功")self.model = QtSql.QSqlTableModel()self.right_batch_result_listView1.setModel(self.model)self.model.setTable('student2')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据with open("8.txt", "r") as f22:lines = f22.readlines()with open("8.txt", "w") as f_w:for line in lines:if gettxt1 in line:continuef_w.write(line)elif gettxt1 in account_value:conn1 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur1 = conn1.cursor()  # 获取一个游标sql_select1 = "select * from student where 姓名='{}'".format(gettxt1)  # 定义查询cur1.execute(sql_select1)  # 执行查询data = cur1.fetchall()  # 获取查询到数据query = 'insert ignore into student2(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'for r in range(1):学号 = data[0][0]姓名 = data[0][1]专业 = data[0][2]班级 = data[0][3]高级程序语言 = data[0][4]python编程 = data[0][5]数据库原理 = data[0][6]数据结构与算法 = data[0][7]数学分析 = data[0][8]高等数学 = data[0][9]网络爬虫 = data[0][10]数据可视化 = data[0][11]数据挖掘 = data[0][12]数据分析 = data[0][13]values = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句cur1.execute(query, values)conn1.commit()  # 提交事务cur1.close()  # 关闭游标conn1.close()  # 释放数据库资源在这里插入代码片conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()  # 获取一个游标sql_select = "DELETE from student where 姓名='{}'".format(gettxt1)  # 定义查询cur.execute(sql_select)  # 执行查询conn.commit()cur.close()conn.close()db = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')if not db.open():  # 判断数据库是否打开print(db.lastError().text())  # 打印操作数据库时出现的错误return Falseelse:print("连接成功")self.model = QtSql.QSqlTableModel()self.right_batch_result_listView1.setModel(self.model)self.model.setTable('student2')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据with open("8.txt", "r") as f22:lines = f22.readlines()with open("8.txt", "w") as f_w:for line in lines:if gettxt1 in line:continuef_w.write(line)else:QMessageBox.information(self, '删除错误', '不存在该学生信息', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)

通过获取输入框中的姓名或者学号,在这之前,我利用一个txt文件去存放了每个学生的姓名和学号将其封装成一个字典,根据获取输入框中的姓名或者学号从中遍历查询,如果存在,则通过select * from student where语句找到在数据库中的位置,并将其显示到界面上,然后再通过DELETE from student where语句对所查询到的数据进行删除,从而实现了学生信息的删除。代码可能写的有些复杂了,如果你有更简单的方法,可以私信我或者给我评论。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

3.更改学生信息

界面样式如下:


修改的代码我写的十分的复杂,反复调用了数据库,多次使用了相同的数据库语言,肯定有更简单的操作方法的,但是那个时候的我,还不是很清楚,但至少做出来了,不知道你有什么高见,欢迎批评指正,代码如下:

#修改def view_data24(self):try:account_dict = {}f = open("8.txt", 'r+')for line in f:(keys, value) = line.strip().split()account_dict[keys] = valueaccount_keys = list(account_dict.keys())account_value = list(account_dict.values())name1 = self.right_bar_widget_folder_input11.text()index = self.model.index(0, 0)  # 调用model的index方法获取行和列对应项的索引data12 = index.data()index = self.model.index(0, 1)  # 调用model的index方法获取行和列对应项的索引data13 = index.data()index = self.model.index(0, 2)  # 调用model的index方法获取行和列对应项的索引data1 = index.data()index = self.model.index(0, 3)  # 调用model的index方法获取行和列对应项的索引data2 = index.data()index = self.model.index(0, 4)  # 调用model的index方法获取行和列对应项的索引data3 = index.data()index = self.model.index(0, 5)  # 调用model的index方法获取行和列对应项的索引data4 = index.data()index = self.model.index(0, 6)  # 调用model的index方法获取行和列对应项的索引data5 = index.data()index = self.model.index(0, 7)  # 调用model的index方法获取行和列对应项的索引data6 = index.data()index = self.model.index(0, 8)  # 调用model的index方法获取行和列对应项的索引data7 = index.data()index = self.model.index(0, 9)  # 调用model的index方法获取行和列对应项的索引data8 = index.data()index = self.model.index(0, 10)  # 调用model的index方法获取行和列对应项的索引data9 = index.data()index = self.model.index(0, 11)  # 调用model的index方法获取行和列对应项的索引data10 = index.data()index = self.model.index(0, 12)  # 调用model的index方法获取行和列对应项的索引data11 = index.data()index = self.model.index(0, 13)  # 调用model的index方法获取行和列对应项的索引data = index.data()if name1 in account_value:conn1 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur1 = conn1.cursor()sql = "UPDATE student SET 专业='" + data1 + "' WHERE 姓名='{}'".format(name1)cur1.execute(sql)conn1.commit()cur1.close()conn1.close()conn2 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur2 = conn2.cursor()sql1 = "UPDATE student SET 班级='" + data2 + "' WHERE 姓名='{}'".format(name1)cur2.execute(sql1)conn2.commit()cur2.close()conn2.close()conn3 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur3 = conn3.cursor()sql2 = "UPDATE student SET 高级程序语言='" + data3 + "' WHERE 姓名='{}'".format(name1)cur3.execute(sql2)conn3.commit()cur3.close()conn3.close()conn4 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur4 = conn4.cursor()sql3 = "UPDATE student SET python编程='" + data4 + "' WHERE 姓名='{}'".format(name1)cur4.execute(sql3)conn4.commit()cur4.close()conn4.close()conn5 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur5 = conn5.cursor()sql4 = "UPDATE student SET 数据库原理='" + data5 + "' WHERE 姓名='{}'".format(name1)cur5.execute(sql4)conn5.commit()cur5.close()conn5.close()conn6 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur6 = conn6.cursor()sql5 = "UPDATE student SET 数据结构与算法='" + data6 + "' WHERE 姓名='{}'".format(name1)cur6.execute(sql5)conn6.commit()cur6.close()conn6.close()conn7 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur7 = conn7.cursor()sql6 = "UPDATE student SET 数学分析='" + data7 + "' WHERE 姓名='{}'".format(name1)cur7.execute(sql6)conn7.commit()cur7.close()conn7.close()conn8 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur8 = conn8.cursor()sql7 = "UPDATE student SET 高等数学='" + data8 + "' WHERE 姓名='{}'".format(name1)cur8.execute(sql7)conn8.commit()cur8.close()conn8.close()conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()sql8 = "UPDATE student SET 网络爬虫='" + data9 + "' WHERE 姓名='{}'".format(name1)cur.execute(sql8)conn.commit()cur.close()conn.close()conn10 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur10 = conn10.cursor()sql9 = "UPDATE student SET 数据可视化='" + data10 + "' WHERE 姓名='{}'".format(name1)cur10.execute(sql9)conn10.commit()cur10.close()conn10.close()conn11 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur11 = conn11.cursor()sql10 = "UPDATE student SET 数据挖掘='" + data11 + "' WHERE 姓名='{}'".format(name1)cur11.execute(sql10)conn11.commit()cur11.close()conn11.close()conn12 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur12 = conn12.cursor()sql11 = "UPDATE student SET 数据分析='" + data + "' WHERE 姓名='{}'".format(name1)cur12.execute(sql11)conn12.commit()cur12.close()conn12.close()conn13 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur13 = conn13.cursor()sql12 = "UPDATE student SET 学号='" + data12 + "' WHERE 姓名='{}'".format(name1)cur13.execute(sql12)conn13.commit()cur13.close()conn13.close()conn14 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur14 = conn14.cursor()sql13 = "UPDATE student SET 姓名='" + data13 + "' WHERE 姓名='{}'".format(name1)cur14.execute(sql13)conn14.commit()cur14.close()conn14.close()with open("8.txt", "r") as f22:lines = f22.readlines()with open("8.txt", "w") as f_w:for line in lines:if name1 in line:f_w.write(data12+ " "+data13+'\n')continuef_w.write(line)QMessageBox.information(self, '成功', '修改成功!', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)elif name1 in account_keys:conn1 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur1 = conn1.cursor()sql = "UPDATE student SET 专业='" + data1 + "' WHERE 学号='{}'".format(name1)cur1.execute(sql)conn1.commit()cur1.close()conn1.close()conn2 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur2 = conn2.cursor()sql1 = "UPDATE student SET 班级='" + data2 + "' WHERE 学号='{}'".format(name1)cur2.execute(sql1)conn2.commit()cur2.close()conn2.close()conn3 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur3 = conn3.cursor()sql2 = "UPDATE student SET 高级程序语言='" + data3 + "' WHERE 学号='{}'".format(name1)cur3.execute(sql2)conn3.commit()cur3.close()conn3.close()conn4 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur4 = conn4.cursor()sql3 = "UPDATE student SET python编程='" + data4 + "' WHERE 学号='{}'".format(name1)cur4.execute(sql3)conn4.commit()cur4.close()conn4.close()conn5 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur5 = conn5.cursor()sql4 = "UPDATE student SET 数据库原理='" + data5 + "' WHERE 学号='{}'".format(name1)cur5.execute(sql4)conn5.commit()cur5.close()conn5.close()conn6 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur6 = conn6.cursor()sql5 = "UPDATE student SET 数据结构与算法='" + data6 + "' WHERE 学号='{}'".format(name1)cur6.execute(sql5)conn6.commit()cur6.close()conn6.close()conn7 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur7 = conn7.cursor()sql6 = "UPDATE student SET 数学分析='" + data7 + "' WHERE 学号='{}'".format(name1)cur7.execute(sql6)conn7.commit()cur7.close()conn7.close()conn8 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur8 = conn8.cursor()sql7 = "UPDATE student SET 高等数学='" + data8 + "' WHERE 学号='{}'".format(name1)cur8.execute(sql7)conn8.commit()cur8.close()conn8.close()conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()sql8 = "UPDATE student SET 网络爬虫='" + data9 + "' WHERE 学号='{}'".format(name1)cur.execute(sql8)conn.commit()cur.close()conn.close()conn10 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur10 = conn10.cursor()sql9 = "UPDATE student SET 数据可视化='" + data10 + "' WHERE 学号='{}'".format(name1)cur10.execute(sql9)conn10.commit()cur10.close()conn10.close()conn11 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur11 = conn11.cursor()sql10 = "UPDATE student SET 数据挖掘='" + data11 + "' WHERE 学号='{}'".format(name1)cur11.execute(sql10)conn11.commit()cur11.close()conn11.close()conn12 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur12 = conn12.cursor()sql11 = "UPDATE student SET 数据分析='" + data + "' WHERE 学号='{}'".format(name1)print(data1)cur12.execute(sql11)conn12.commit()cur12.close()conn12.close()conn13 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur13 = conn13.cursor()sql12 = "UPDATE student SET 学号='" + data12 + "' WHERE 学号='{}'".format(name1)cur13.execute(sql12)conn13.commit()cur13.close()conn13.close()conn14 = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur14 = conn14.cursor()sql13 = "UPDATE student SET 姓名='" + data13 + "' WHERE 学号='{}'".format(name1)cur14.execute(sql13)conn14.commit()cur14.close()conn14.close()with open("8.txt", "r") as f22:lines = f22.readlines()with open("8.txt", "w") as f_w:for line in lines:if name1 in line:f_w.write(data12 + " " + data13 + '\n')continuef_w.write(line)QMessageBox.information(self, '成功', '修改成功!', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)else:QMessageBox.information(self, '错误', '输入不能为空', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)except:QMessageBox.information(self, '错误', '操作错误', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)

大致方法就是通过姓名或者学号查询到你要修改的人,这种model的表格的好处就是可以直接在原数据上进行修改,因此在查询到的数据上进行修改后,获取到该表格上的所有数据的索引,然后利用UPDATE student SET 专业=’" + data1 + "’ WHERE 姓名=’{}'语句进行数据库的查询并将每个索引上的数据进行重新修改到数据库中,其实这个中间也将那些没改的数据重新的覆写了一遍,不知道你们有什么更好的意见吗?具体可以看代码中的注释,还有什么不懂的可以私信或者评论,我也会及时回复你的。这就是修改学生信息的功能。

4.查询学生信息

界面样式如下:
其实查询功能是相对比较简单的,代码如下:

#信息查询中的查询def view_data111(self):account_dict = {}f = open("8.txt", 'r+')for line in f:(keys, value) = line.strip().split()account_dict[keys] = valueaccount_keys = list(account_dict.keys())account_value = list(account_dict.values())gettxt= self.right_bar_widget_folder_input88.text()if gettxt == '':QMessageBox.information(self, '错误', '输入不能为空', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)else:conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()  # 获取一个游标if gettxt in account_keys:sql_select = "select * from student where 学号='{}'".format(gettxt)  # 定义查询cur.execute(sql_select)  # 执行查询data = cur.fetchall()  # 获取查询到数据# 创建插入SQL语句# 获得游标cur = conn.cursor()query = 'insert ignore into student1(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'# 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题行for r in range(1):学号 = data[0][0]姓名 = data[0][1]专业 = data[0][2]班级 = data[0][3]高级程序语言 = data[0][4]python编程 = data[0][5]数据库原理 = data[0][6]数据结构与算法 = data[0][7]数学分析 = data[0][8]高等数学 = data[0][9]网络爬虫 = data[0][10]数据可视化 = data[0][11]数据挖掘 = data[0][12]数据分析 = data[0][13]values = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句# cur.execute(query1)cur.execute(query, values)conn.commit()  # 提交事务cur.close()  # 关闭游标conn.close()  # 释放数据库资源在这里插入代码片# 实例化一个可编辑数据模型global dbdb = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')if not db.open():  # 判断数据库是否打开print(db.lastError().text())  # 打印操作数据库时出现的错误return Falseelse:self.model = QtSql.QSqlTableModel()self.right_batch_result_listView.setModel(self.model)self.model.setTable('student1')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据elif gettxt in account_value:sql_select = "select * from student where 姓名='{}'".format(gettxt)  # 定义查询cur.execute(sql_select)  # 执行查询data = cur.fetchall()  # 获取查询到数据# 创建插入SQL语句# 获得游标cur = conn.cursor()query = 'insert ignore into student1(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'# 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题行for r in range(1):学号 = data[0][0]姓名 = data[0][1]专业 = data[0][2]班级 = data[0][3]高级程序语言 = data[0][4]python编程 = data[0][5]数据库原理 = data[0][6]数据结构与算法 = data[0][7]数学分析 = data[0][8]高等数学 = data[0][9]网络爬虫 = data[0][10]数据可视化 = data[0][11]数据挖掘 = data[0][12]数据分析 = data[0][13]values = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句# cur.execute(query1)cur.execute(query, values)conn.commit()  # 提交事务cur.close()  # 关闭游标conn.close()  # 释放数据库资源在这里插入代码片# 实例化一个可编辑数据模型db = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')if not db.open():  # 判断数据库是否打开print(db.lastError().text())  # 打印操作数据库时出现的错误return Falseelse:self.model = QtSql.QSqlTableModel()self.right_batch_result_listView.setModel(self.model)self.model.setTable('student1')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据else:QMessageBox.information(self, '错误', '不存在该学生信息', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)

先是通过insert ignore into student1将表头存入一个新的数据表中,然后通过输入姓名或者学号,将获取的姓名和学号放入循环中查找,如果存在,就利用select * from student where 查询到数据,存入我们新建的数据表中,再将新的数据表中的内容展示到我们的界面上。一些细小的问题可以看代码和注释。

5.其他功能

查询全部学生信息

将所有学生信息呈现到界面上,代码如下:

    def view_data1111(self):try:global dbdb = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')if not db.open():  # 判断数据库是否打开print(db.lastError().text())  # 打印操作数据库时出现的错误return Falseelse:print("连接成功")except :pass# 实例化一个可编辑数据模型self.model = QtSql.QSqlTableModel()self.right_batch_result_listView2.setModel(self.model)self.model.setTable('student')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据

大致方法就是获取整张表的内容,然后将其放入我们的数据模型中(QSqlTableModel)。

清空学生信息

将学生信息在界面上清除,这里采用的方法是将我们新建的数据表清空,代码如下:

    def view_data2(self):conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()  # 获取一个游标query1 ='truncate table student1;'cur.execute(query1)conn.commit()  # 提交事务cur.close()  # 关闭游标conn.close()  # 释放数据库资源在这里插入代码片global dbdb = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')if not db.open():  # 判断数据库是否打开print(db.lastError().text())  # 打印操作数据库时出现的错误return Falseelse:self.model = QtSql.QSqlTableModel()self.right_batch_result_listView.setModel(self.model)self.model.setTable('student1')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据

查询增加的学生信息

通过查询索引的方式,获取刚刚增加的学生信息放入一张新的数据表中,然后展现出来,代码如下:

 #查询增加的学生信息def view_data53(self):try:index = self.model.index(self.model.rowCount() - 1, 0)  # 调用model的index方法获取行和列对应项的索引data12 = index.data()index = self.model.index(self.model.rowCount() - 1, 1)  # 调用model的index方法获取行和列对应项的索引data13 = index.data()index = self.model.index(self.model.rowCount() - 1, 2)  # 调用model的index方法获取行和列对应项的索引data1 = index.data()index = self.model.index(self.model.rowCount() - 1, 3)  # 调用model的index方法获取行和列对应项的索引data2 = index.data()index = self.model.index(self.model.rowCount() - 1, 4)  # 调用model的index方法获取行和列对应项的索引data3 = index.data()index = self.model.index(self.model.rowCount() - 1, 5)  # 调用model的index方法获取行和列对应项的索引data4 = index.data()index = self.model.index(self.model.rowCount() - 1, 6)  # 调用model的index方法获取行和列对应项的索引data5 = index.data()index = self.model.index(self.model.rowCount() - 1, 7)  # 调用model的index方法获取行和列对应项的索引data6 = index.data()index = self.model.index(self.model.rowCount() - 1, 8)  # 调用model的index方法获取行和列对应项的索引data7 = index.data()index = self.model.index(self.model.rowCount() - 1, 9)  # 调用model的index方法获取行和列对应项的索引data8 = index.data()index = self.model.index(self.model.rowCount() - 1, 10)  # 调用model的index方法获取行和列对应项的索引data9 = index.data()index = self.model.index(self.model.rowCount() - 1, 11)  # 调用model的index方法获取行和列对应项的索引data10 = index.data()index = self.model.index(self.model.rowCount() - 1, 12)  # 调用model的index方法获取行和列对应项的索引data11 = index.data()index = self.model.index(self.model.rowCount() - 1, 13)  # 调用model的index方法获取行和列对应项的索引data = index.data()conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='student', charset='utf8')cur = conn.cursor()  # 获取一个游标# 创建插入SQL语句query = 'insert into student3(学号,姓名,专业,班级,高级程序语言,python编程,数据库原理,数据结构与算法,数学分析,高等数学,网络爬虫,数据可视化,数据挖掘,数据分析) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'# 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题行学号 = data12姓名 = data13专业 = data1班级 = data2高级程序语言 = data3python编程 = data4数据库原理 = data5数据结构与算法 = data6数学分析 = data7高等数学 = data8网络爬虫 = data9数据可视化 = data10数据挖掘 = data11数据分析 = datavalues = (学号, 姓名, 专业, 班级, 高级程序语言, python编程, 数据库原理, 数据结构与算法, 数学分析, 高等数学, 网络爬虫, 数据可视化, 数据挖掘, 数据分析)# 执行sql语句cur.execute(query, values)cur.close()conn.commit()conn.close()self.model = QtSql.QSqlTableModel()self.right_batch_result_listView3.setModel(self.model)self.model.setTable('student3')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据except:db = QtSql.QSqlDatabase.addDatabase('QMYSQL')db.setHostName('localhost')db.setDatabaseName('student')db.setUserName('root')db.setPassword('')self.model = QtSql.QSqlTableModel()self.right_batch_result_listView3.setModel(self.model)self.model.setTable('student3')  # 设置使用数据模型的数据表self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改self.model.select()  # 查询所有数据

总结

以上就是增删改查部分的功能实现方法和界面样式设计了,蛮久之前写的了,如果叙述与代码有出入,希望能够理解,而且现在看我的代码真的是惨不忍睹,太乱了,也希望大家能谅解。由于时间原因,成绩统计以及排名分布等功能我会写在我的下一个博客中,也希望大家能够多多提出你们的看法批评指正,我也会尽快更新我的下一个博客的。我们一起共同努力,加油!

最后完整的代码我也上传到我的github上了,自取:
链接: 学生信息管理系统2.0.
由于我是初学者,所以整个代码都写在了一个py文件里,所以看着会十分费劲,而且代码内容可能存在重复,多余,繁琐,望理解,但是对于我来说我能够完整的做完整个项目,我已经十分开心了,请大佬轻喷。当然也希望你们能喜欢我的分享。

python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇相关推荐

  1. SpringBoot学生信息管理系统_毕业设计(附源码)

    项目简介 基本功能 学生信息管理,增删改查,以及文件备份,批量注册,前后端同时校验数据,将异常数据响应给用户. 用户信息管理,对于角色控制,用户状态的控制. 课程信息管理,课程相关管理. 公告管理,发 ...

  2. PHP+Mysql—学生信息管理系统网站开发(整套源码)

    一.功能 前台功能: 1.用户登录.查看个人信息.个人信息修改 2.查看每个学院的学生信息 3.管理后台登录.退出 后台功能: 1.后台登录 2.管理员密码修改 3.学生信息管理:查看账户.添加账户. ...

  3. python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细)——登录,注册及找回密码篇

    python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细)--登录,注册及找回密码篇 前言 一.pyqt5是什么? 二.代码方面 1.引入库及效果展示 2.首先介绍一下登录,注册及密码 ...

  4. PHP+MySQL实现学生信息管理系统登录功能(附带源码)

    文件目录 包括学生登录界面和管理员登录界面 由于功能相同 只展示管理员登录界面 index.html文件 <!DOCTYPE html><html lang="en&quo ...

  5. C语言小项目:学生信息管理系统(超详细)

    学生信息管理系统 需求概述 展示 总体设计 功能划分 数据结构 程序流程 详细设计 头文件部分 结构体 密码登录模块 菜单显示 班级创建模块 学生信息录入模块 学生信息显示模块 学生信息查询模块 学生 ...

  6. 【Python】基于人脸识别的智能考勤系统(Pyqt5+MySQL+Opencv) [PC端部分-已附源码]

    [Python]基于人脸识别的考勤系统 [PC端部分] 一.项目简介 本项目编程语言Python3.6,编程工具pycharm,其他工具QT Designer.Navicat,表单信息保存在本地MyS ...

  7. python爬百度翻译-爬虫 python爬取百度翻译接口 超详细附源码

    前言 今天教大家如何利用 firefox 分析百度翻译的接口,并用python爬取接口.大家学会后可以干一些有趣的事情,比如做一个自己的翻译软件. 具体内容 1 - 找到URL接口 进入百度翻译的网址 ...

  8. 【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术.文本挖掘以及计算机语言学等方法来正确识别和提取文 ...

  9. 【Python+百度API】实现人脸识别和颜值检测系统(包括人脸数量、年龄、颜值评分、性别、种族、表情检测)(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 本系统根据已有的模型上改写,添加了在给照片打分的同时可以显示照片,这样显得更加直观和真实 一.百度API文档 如需要请自行前往官网查询文档相关内容 百度A ...

最新文章

  1. Python如何实现单步调试
  2. Linux利用子命令m,Linux mdir命令
  3. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)
  4. a的n次方的最后三位数c语言,求13的n次方(12n≤130000000000)的最后三位数,用c++编程...
  5. [深度学习-原理]浅谈Attention Model
  6. RealWave Surfaces 泡沫
  7. 【学术新闻】强强联合!Papers with Code携手arXiv,上传论文、提交代码一步到位...
  8. 如何写一篇文献计量分析论文---citespace+vosviewer+文献计量在线分析平台
  9. 【学习笔记】用Excel制作随机抽奖器(Visual Basic编程)。
  10. php 查看linux硬盘序列号,LINUX获取硬盘序列号
  11. Python PIL 库的应用
  12. ICC 图文学习——LAB3:Placement 布局
  13. H264马赛克、延时的优化
  14. 将一个数组中重复的元素去除,并且返回一个新数组
  15. 创业阶段如何找客户_创业者如何找客户群
  16. 头歌实训项目【人与复读机】
  17. Spring Cloud Alibaba微服务架构实战教程—07集成knife4j生成Api文档
  18. python 开发视频播放网站_python开发微电影视频网站教程附源码
  19. Allegro 灵巧手 -硅步机器人
  20. 移动平均法的两个版本

热门文章

  1. 国内首部“无限流”,热搜突破300+,《开端》能否创造国产剧新方向?
  2. 今天发现一个玩崩坏3手游效果特别好的神器,特意来安利一下
  3. 在北京工作,租房能成功提取公积金吗?
  4. 案例C语言在金融工程中应用,成功案例——跨专业申请美国金融工程硕士
  5. 双系统下grub引导windows系统
  6. Docker Hub + Github 自动化构建docker镜像
  7. 【模版】背包问题汇总
  8. D、数列求和(嘤雄难度) J、滑稽树下你和我 I、滑稽树上滑稽果
  9. 送20本纸质书籍,包邮
  10. 宜人贷PaaS数据服务平台Genie:技术架构及功能