返回顶部
首页 > 资讯 > 后端开发 > Python >Python+PyQt如何实现数据库表格动态增删改
  • 515
分享到

Python+PyQt如何实现数据库表格动态增删改

2023-06-29 08:06:03 515人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python+PyQt如何实现数据库表格动态增删改,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!题目描述本次实验为连接数据库的实验,并对数据库进行一些简单的操作,要实现的基本功能如下所示,要能连接并展现数

小编给大家分享一下python+PyQt如何实现数据库表格动态增删改,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

题目描述

本次实验为连接数据库的实验,并对数据库进行一些简单的操作,要实现的基本功能如下所示,要能连接并展现数据库里的数据,能够实现插入功能。

Python+PyQt如何实现数据库表格动态增删改

拓展;

  • 实现按学号查找学生信息功能

  • 实现清空数据功能

  • 实现保存数据功能

  • 实现右键菜单功能

解题思路/算法分析/问题及解决

本次实验可主要分为两个部分,即数据库连接操作部分和数据可视化操作界面部分。

数据库连接部分采用Python的pymysql库对数据库进行连接操作。

数据可视化部分采用tableWidget控件进行表格化的呈现,并通过相应的控件交互来实现功能。TableWidget的主要方法如下表所示:

Python+PyQt如何实现数据库表格动态增删改

实验代码

数据库连接

def db_connect(self):        self.db = pyMysql.connect(host='localhost',                             user='root',                             passWord='Zwq197166',                             port=3306,                             database='test')

可视化界面操作部分

def inser_row(self, row, sid, name, sex, address):        sid_item = QTableWidgetItem(sid)        name_item = QTableWidgetItem(name)        sex_item = QTableWidgetItem(sex)        address_item = QTableWidgetItem(address)        self.tableWidget.insertRow(row)        self.tableWidget.setItem(row, 0, sid_item)        self.tableWidget.setItem(row, 1, name_item)        self.tableWidget.setItem(row, 2, sex_item)        self.tableWidget.setItem(row, 3, address_item)    @pyqtSlot()    def on_button_load_clicked(self):        if self.button_save.isEnabled():            r = QMessageBox.warning(self, "警告", "是否覆盖当前表格数据", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)            if r == QMessageBox.No:                return        self.tableWidget.setRowCount(0)        self.tableWidget.clearContents()        self.db_connect()        cursor = self.db.cursor()        sql = "select * from my_student;"        try:            cursor.execute(sql)            results = cursor.fetchall()            for (sid, name, sex,address) in results:                print(sid, name, sex, address)                row = self.tableWidget.rowCount()                # print(row)                self.inser_row(row, sid, name, sex, address)                data[sid] = [name, sex, address]        except:            print("unable to fetch data")        self.db.close()        self.button_save.setEnabled(True)        print("load")    @pyqtSlot()    def on_button_add_clicked(self):        di = inputDialog()        ok = di.exec_()        if not ok:            return        name = di.line_name.text()        sid = di.line_id.text()        sex = di.line_sex.text()        address = di.line_address.text()        print(name,sid)        print(type(address))        data[sid] = [name, sex, address]        self.inser_row(self.tableWidget.rowCount(), sid, name, sex, address)        print(data)        print("add")        # self.tableWidget.insertRow(self.tableWidget.rowCount()-1)        self.button_save.setEnabled(True)    @pyqtSlot()    def on_button_save_clicked(self):        print(data)        self.db_connect()        cursor = self.db.cursor()        try:            sql = "delete from my_student;"            cursor.execute(sql)            # self.db.commit()            for key, value in data.items():                sql = "insert into my_student(sid,name,sex,address) values('{sid}','{name}','{sex}','{address}');".fORMat(sid=key, name=value[0], sex=value[1], address=value[2])                print(sql)                cursor.execute(sql)            self.db.commit()            self.db.close()            print("save")            self.button_save.setEnabled(False)        except:            QMessageBox.critical(self, "错误", "数据格式有误,请检查")    @pyqtSlot()    def on_button_clear_clicked(self):        self.tableWidget.setRowCount(0)        self.tableWidget.clearContents()        data.clear()        self.line_id.clear()        self.button_save.setEnabled(True)    @pyqtSlot()    def on_button_search_clicked(self):        sid = self.line_id.text()        if not sid:            QMessageBox.critical(self, "警告", "请输入一个学号!")            return        print(sid)        if sid in data:            search = INFO(sid)            search.exec_()            # print("search")        else:            QMessageBox.critical(self, "错误", "该学号不存在!")    @pyqtSlot(QTableWidgetItem)    def on_tableWidget_iteMactivated(self, item):        """        按住Enter键时,当前选中的单元格向下        """        row = self.tableWidget.row(item)        column = self.tableWidget.column(item)        totalrow = self.tableWidget.rowCount()        if row + 1 < totalrow:            row = self.tableWidget.row(item) + 1            self.tableWidget.setCurrentCell(row, column)        elif row + 2 == totalrow:            row = totalrow - 1            self.tableWidget.setCurrentCell(row, column)    @pyqtSlot(int, int)    def on_tableWidget_cellDoubleClicked(self, row, column):        id = self.tableWidget.item(row, 0).text()        di = inputDialog(sid=id)        ok = di.exec_()        if not ok:            return        name = di.line_name.text()        sid = di.line_id.text()        sex = di.line_sex.text()        address = di.line_address.text()        print("before:", id)        print("after:", sid)        self.tableWidget.item(row, 0).setText(sid)        self.tableWidget.item(row, 1).setText(name)        self.tableWidget.item(row, 2).setText(sex)        self.tableWidget.item(row, 3).setText(address)        data[sid] = [name, sex, address]        if id != sid:            del data[id]        self.button_save.setEnabled(True)    def closeEvent(self, event):        if self.button_save.isEnabled():            r = QMessageBox.warning(self, "警告", "你还有操作没保存,现在保存下?", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)            if r == QMessageBox.No:                event.accept()            else:                event.ignore()    def context_menu(self,pos):        pop_menu = QMenu()        change_new_event = pop_menu.addAction("修改行")        delete_event = pop_menu.addAction("删除行")        action = pop_menu.exec_(self.tableWidget.mapToGlobal(pos))        if action == change_new_event:            item = self.tableWidget.selectedItems()            row = item[0].row()            id = self.tableWidget.item(row, 0).text()            di = inputDialog(sid=id)            ok = di.exec_()            if not ok:                return            name = di.line_name.text()            sid = di.line_id.text()            sex = di.line_sex.text()            address = di.line_address.text()            print("before:",id)            print("after:",sid)            self.tableWidget.item(row, 0).setText(sid)            self.tableWidget.item(row, 1).setText(name)            self.tableWidget.item(row, 2).setText(sex)            self.tableWidget.item(row, 3).setText(address)            data[sid] = [name, sex, address]            if id != sid:                del data[id]            self.button_save.setEnabled(True)        elif action == delete_event:            r = QMessageBox.warning(self, "注意", "删除可不能恢复了哦!", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)            if r == QMessageBox.No:                return            items = self.tableWidget.selectedItems()            if items:                selected_rows = []                for i in items:                    row = i.row()                    if row not in selected_rows:                        selected_rows.append(row)                selected_rows = sorted(selected_rows, reverse=True)                for r in selected_rows:                    sid = self.tableWidget.item(r, 0).text()                    del data[sid]                    self.tableWidget.removeRow(r)            self.button_save.setEnabled(True)class inputDialog(QDialog, Ui_Dialog_input):    def __init__(self, sid=None):        super(inputDialog, self).__init__()        self.setupUi(self)        self.sid = sid        self.buttonBox.accepted.connect(self.check)        if sid:            self.line_id.setText(sid)            self.line_name.setText(data[sid][0])            self.line_sex.setText(data[sid][1])            self.line_address.setText(data[sid][2])    def check(self):        sid = self.line_id.text()        name = self.line_name.text()        if sid in data and self.sid not in data:            r = QMessageBox.warning(self, "警告", "该学号已存在!", QMessageBox.Ok)            return        if not sid:            r = QMessageBox.warning(self, "警告", "学号为必填项!", QMessageBox.Ok)            return        if not name:            r = QMessageBox.warning(self, "警告", "姓名为必填项!", QMessageBox.Ok)            return        self.accept()        # print('miss')class INFO(QDialog, Ui_Dialog_info):    def __init__(self, id: str):        super(INFO, self).__init__()        self.setupUi(self)        self.line_id.setText(id)        self.line_name.setText(data[id][0])        self.line_sex.setText(data[id][1])        self.line_address.setText(data[id][2])    @pyqtSlot()    def on_button_confirm_clicked(self):        # print(1)        self.close()

运行结果

导入数据:

Python+PyQt如何实现数据库表格动态增删改

添加数据:

Python+PyQt如何实现数据库表格动态增删改

Python+PyQt如何实现数据库表格动态增删改

清空数据:

Python+PyQt如何实现数据库表格动态增删改

搜索数据:

Python+PyQt如何实现数据库表格动态增删改

修改数据:

双击修改

Python+PyQt如何实现数据库表格动态增删改

右键菜单修改:

Python+PyQt如何实现数据库表格动态增删改

删除后:

Python+PyQt如何实现数据库表格动态增删改

Python+PyQt如何实现数据库表格动态增删改

保存数据:

Python+PyQt如何实现数据库表格动态增删改

看完了这篇文章,相信你对“Python+PyQt如何实现数据库表格动态增删改”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网Python频道,感谢各位的阅读!

--结束END--

本文标题: Python+PyQt如何实现数据库表格动态增删改

本文链接: https://lsjlt.com/news/323735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python+PyQt如何实现数据库表格动态增删改
    小编给大家分享一下Python+PyQt如何实现数据库表格动态增删改,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!题目描述本次实验为连接数据库的实验,并对数据库进行一些简单的操作,要实现的基本功能如下所示,要能连接并展现数...
    99+
    2023-06-29
  • Python+PyQt5实现数据库表格动态增删改
    目录题目描述解题思路/算法分析/问题及解决实验代码运行结果题目描述 本次实验为连接数据库的实验,并对数据库进行一些简单的操作,要实现的基本功能如下所示,要能连接并展现数据库里的数据,...
    99+
    2024-04-02
  • PyQt5 python 数据库 表格动态增删改详情
    目录(一)、手动连接数据库(二)、编程中使用数据库  (一)、手动连接数据库 与下一个的程序连接数据库是独立的2个部分 (4)属性中的连接字符串 (二)、编程中使用数据...
    99+
    2024-04-02
  • Mysql 数据库表如何增删改查
    这篇文章将为大家详细讲解有关Mysql 数据库表如何增删改查,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、表操作1、【增加】 create table ...
    99+
    2024-04-02
  • 数据库的增删改查如何实现
    数据库的增删改查操作可以通过SQL语句来实现。下面以MySQL数据库为例,介绍增删改查的常见操作:1. 增加(Insert):使用I...
    99+
    2023-08-31
    数据库
  • vue element实现表格增加删除修改数据
    本文实例为大家分享了vue element实现表格增加删除修改数据的具体代码,供大家参考,具体内容如下 这里用到是设置一个弹出框来实现此功能,还有一种方法是直接在原来的基础上面进行修...
    99+
    2024-04-02
  • java如何连接数据库实现增删改查
    Java可以使用Java Database Connectivity(JDBC)API连接数据库并实现增删改查操作。以下是一个简单的...
    99+
    2023-08-24
    java 数据库
  • vue.js+Element如何实现表格里的增删改查
    这篇文章主要介绍了vue.js+Element如何实现表格里的增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。新项目使用的是vue.j...
    99+
    2024-04-02
  • 3.Python-用Python实现MySQL数据库的增删改查
    题记         用python实现mysql数据库的增删改查,以下是具体的代码和操作步骤 安装flask模块         pip install flask 安装mysql.connector模块         pip...
    99+
    2023-10-18
    mysql 数据库 python flask javascript 开发语言 青少年编程
  • JavaScript如何实现动态加载删除表格
    这篇文章将为大家详细讲解有关JavaScript如何实现动态加载删除表格,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下代码:<!DOCTYPE html><html...
    99+
    2023-06-14
  • php如何实现数据的增删改查
    PHP可以通过以下方式实现数据的增删改查:1. 数据的增加(Create):- 使用SQL语句插入数据:可以使用`INSERT IN...
    99+
    2023-08-23
    php
  • PHP+MySQL如何实现数据库的增删改查操作
    今天小编给大家分享一下PHP+MySQL如何实现数据库的增删改查操作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、环境配...
    99+
    2023-07-05
  • MongoDB实现创建删除数据库、创建删除表(集合 )、数据增删改查
    一、 数据库使用 开启 mongodb 服务:要管理数据库,必须先开启服务,开启服务使用  mongod --dbpath c:\mongodb 管理 mongodb 数据库:(一定要在新的 cmd 中输入...
    99+
    2022-06-26
    MongoDB 创建删除数据库 创建删除表 创建删除对象 数据增删改查
  • MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查
    这篇文章主要介绍“MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查”,在日常操作中,相信很多人在MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-02
  • MongoDB实现创建删除数据库、创建删除表(集合)、数据增删改查
    一、 数据库使用 开启 mongodb 服务:要管理数据库,必须先开启服务,开启服务使用  mongod --dbpath c:\mongodb 管理 mongodb ...
    99+
    2024-04-02
  • JDBC实现数据库增删改查功能
    JDBC,简单点来说,就是用Java操作数据库,下面简单介绍怎么实现数据库的增删改查功能。 1、添加数据 package cn.itcast.jdbc; import java...
    99+
    2024-04-02
  • winform数据库增删改查怎么实现
    在WinForm应用程序中实现对数据库的增删改查操作,可以按照以下步骤进行:1. 创建数据库连接:使用合适的数据库连接对象(如Sql...
    99+
    2023-09-05
    winform 数据库
  • python Django如何实现增删改查
    这篇文章主要介绍python Django如何实现增删改查,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.先创建个app子级python .\manage.py startapp&nb...
    99+
    2023-06-29
  • vue实现表单数据的增删改功能
    本文实例为大家分享了vue实现表单数据增删改功能的具体代码,供大家参考,具体内容如下 图示如下: <!DOCTYPE html> <html lang="en"...
    99+
    2024-04-02
  • Go语言如何实现数据库的增删改查操作?
    Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作