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

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

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


前言

在我的上一篇博客中,我们已经讲了登录,注册及找回密码的操作,接下来我将与大家分享一哈该学生信息管理系统中的增,删,改,查部分的操作和实现方法。
如图所示:
python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇_第1张图片


接下来让我们开始吧!

一、主界面的样式

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

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列,占83列
        self.main_layout.addWidget(self.right_widget, 0, 2, 12, 10)  # 右侧部件在第0行第3列,占89列

        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).value
            python编程 = 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).value
            with 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.增加学生信息

关于学生信息的增加界面如下:
python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇_第2张图片
界面的样式就不做过的赘述了与之前的都差不多,这里主要讲一下,如何实现数据的增加以及如图所示的表格实现方式。具体代码如下:

#增加
    def view_data5(self):
        global db
        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('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
        高级程序语言 = data3
        python编程 = data4
        数据库原理 = data5
        数据结构与算法 = data6
        数学分析 = data7
        高等数学 = data8
        网络爬虫 = data9
        数据可视化 = data10
        数据挖掘 = data11
        数据分析 = data
        values = (学号, 姓名, 专业, 班级, 高级程序语言, 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.删除学生信息

界面样式如下:
python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇_第3张图片
界面布局与设计就不做过多的赘述了,我们来讲讲其中的功能是如何实现的。代码如下:

 #删除
    def view_data3(self):
        account_dict = {
     }
        f = open("8.txt", 'r+')
        for line in f:
            (keys, value) = line.strip().split()
            account_dict[keys] = value
        account_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 False
                else:
                    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:
                                continue
                            f_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 False
                else:
                    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:
                                continue
                            f_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.更改学生信息

界面样式如下:

python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇_第4张图片
修改的代码我写的十分的复杂,反复调用了数据库,多次使用了相同的数据库语言,肯定有更简单的操作方法的,但是那个时候的我,还不是很清楚,但至少做出来了,不知道你有什么高见,欢迎批评指正,代码如下:

#修改
    def view_data24(self):
      try:
        account_dict = {
     }
        f = open("8.txt", 'r+')
        for line in f:
            (keys, value) = line.strip().split()
            account_dict[keys] = value
        account_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')
                      continue
                  f_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')
                        continue
                    f_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.查询学生信息

界面样式如下:
python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇_第5张图片其实查询功能是相对比较简单的,代码如下:

#信息查询中的查询
    def view_data111(self):
        account_dict = {
     }
        f = open("8.txt", 'r+')
        for line in f:
            (keys, value) = line.strip().split()
            account_dict[keys] = value
        account_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 db
                 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 False
                 else:
                     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 False
                  else:
                      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 db
            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 False
            else:
                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 db
        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 False
        else:
            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
        高级程序语言 = data3
        python编程 = data4
        数据库原理 = data5
        数据结构与算法 = data6
        数学分析 = data7
        高等数学 = data8
        网络爬虫 = data9
        数据可视化 = data10
        数据挖掘 = data11
        数据分析 = data
        values = (学号, 姓名, 专业, 班级, 高级程序语言, 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,mysql,pycharm,qt,pyqt5)