PyQt5+MySQL+PyMySQL模块实现个简单的增删改查,代码示例

时间: 2023-09-25 07:06:34 浏览: 196
### 回答1: 以下是一个简单的 PyQt5 MySQL PyMySQL 模块实现增删改查的示例代码: ```python import pymysql from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QMessageBox, QTableWidget, QTableWidgetItem class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('PyQt5 MySQL PyMySQL') self.setGeometry(300, 300, 500, 500) # 连接 MySQL 数据库 self.conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8') self.cursor = self.conn.cursor() # 创建控件 self.label1 = QLabel('姓名') self.label2 = QLabel('年龄') self.label3 = QLabel('性别') self.nameEdit = QLineEdit() self.ageEdit = QLineEdit() self.genderEdit = QLineEdit() self.addButton = QPushButton('添加') self.deleteButton = QPushButton('删除') self.updateButton = QPushButton('更新') self.queryButton = QPushButton('查询') self.tableWidget = QTableWidget() # 布局 hbox1 = QHBoxLayout() hbox1.addWidget(self.label1) hbox1.addWidget(self.nameEdit) hbox1.addWidget(self.label2) hbox1.addWidget(self.ageEdit) hbox1.addWidget(self.label3) hbox1.addWidget(self.genderEdit) hbox2 = QHBoxLayout() hbox2.addWidget(self.addButton) hbox2.addWidget(self.deleteButton) hbox2.addWidget(self.updateButton) hbox2.addWidget(self.queryButton) vbox = QVBoxLayout() vbox.addLayout(hbox1) vbox.addLayout(hbox2) vbox.addWidget(self.tableWidget) self.setLayout(vbox) # 信号槽连接 self.addButton.clicked.connect(self.addRecord) self.deleteButton.clicked.connect(self.deleteRecord) self.updateButton.clicked.connect(self.updateRecord) self.queryButton.clicked.connect(self.queryRecord) # 显示窗口 self.show() def addRecord(self): name = self.nameEdit.text() age = self.ageEdit.text() gender = self.genderEdit.text() if name and age and gender: sql = "INSERT INTO students (name, age, gender) VALUES ('{}', {}, '{}')".format(name, age, gender) try: self.cursor.execute(sql) self.conn.commit() QMessageBox.information(self, '添加成功', '添加记录成功!') except Exception as e: self.conn.rollback() QMessageBox.warning(self, '添加失败', '添加记录失败:{}'.format(str(e))) else: QMessageBox.warning(self, '添加失败', '请填写完整信息!') def deleteRecord(self): row = self.tableWidget.currentRow() if row >= : id = self.tableWidget.item(row, ).text() sql = "DELETE FROM students WHERE id = {}".format(id) try: self.cursor.execute(sql) self.conn.commit() self.tableWidget.removeRow(row) QMessageBox.information(self, '删除成功', '删除记录成功!') except Exception as e: self.conn.rollback() QMessageBox.warning(self, '删除失败', '删除记录失败:{}'.format(str(e))) else: QMessageBox.warning(self, '删除失败', '请选择要删除的记录!') def updateRecord(self): row = self.tableWidget.currentRow() if row >= : id = self.tableWidget.item(row, ).text() name = self.nameEdit.text() age = self.ageEdit.text() gender = self.genderEdit.text() if name and age and gender: sql = "UPDATE students SET name = '{}', age = {}, gender = '{}' WHERE id = {}".format(name, age, gender, id) try: self.cursor.execute(sql) self.conn.commit() self.tableWidget.setItem(row, 1, QTableWidgetItem(name)) self.tableWidget.setItem(row, 2, QTableWidgetItem(age)) self.tableWidget.setItem(row, 3, QTableWidgetItem(gender)) QMessageBox.information(self, '更新成功', '更新记录成功!') except Exception as e: self.conn.rollback() QMessageBox.warning(self, '更新失败', '更新记录失败:{}'.format(str(e))) else: QMessageBox.warning(self, '更新失败', '请填写完整信息!') else: QMessageBox.warning(self, '更新失败', '请选择要更新的记录!') def queryRecord(self): self.tableWidget.clear() self.tableWidget.setColumnCount(4) self.tableWidget.setHorizontalHeaderLabels(['ID', '姓名', '年龄', '性别']) sql = "SELECT * FROM students" try: self.cursor.execute(sql) results = self.cursor.fetchall() self.tableWidget.setRowCount(len(results)) for i, row in enumerate(results): for j, col in enumerate(row): self.tableWidget.setItem(i, j, QTableWidgetItem(str(col))) except Exception as e: QMessageBox.warning(self, '查询失败', '查询记录失败:{}'.format(str(e))) def closeEvent(self, event): self.cursor.close() self.conn.close() if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec_() ``` 注意:这只是一个简单的示例代码,实际应用中需要根据具体情况进行修改和优化。 ### 回答2: 使用PyQt5和PyMySQL模块实现一个简单的增删改查操作,以下是代码示例: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QTableWidgetItem, QTableWidget import pymysql class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() self.db = pymysql.connect("localhost", "username", "password", "database_name") self.cursor = self.db.cursor() def initUI(self): self.setWindowTitle("简单的增删改查") self.setGeometry(300, 300, 500, 350) self.centralWidget = QWidget(self) self.setCentralWidget(self.centralWidget) self.layout = QVBoxLayout() self.centralWidget.setLayout(self.layout) self.inputLayout = QHBoxLayout() self.layout.addLayout(self.inputLayout) self.nameLabel = QLabel("姓名:") self.inputLayout.addWidget(self.nameLabel) self.nameInput = QLineEdit() self.inputLayout.addWidget(self.nameInput) self.addButton = QPushButton("添加") self.addButton.clicked.connect(self.addRecord) self.layout.addWidget(self.addButton) self.tableWidget = QTableWidget() self.layout.addWidget(self.tableWidget) self.loadTable() def loadTable(self): self.cursor.execute("SELECT * FROM students") results = self.cursor.fetchall() self.tableWidget.setRowCount(len(results)) self.tableWidget.setColumnCount(2) self.tableWidget.setHorizontalHeaderLabels(["ID", "姓名"]) for i, row in enumerate(results): for j, value in enumerate(row): self.tableWidget.setItem(i, j, QTableWidgetItem(str(value))) def addRecord(self): name = self.nameInput.text() if name: sql = "INSERT INTO students (name) VALUES ('%s')" % name try: self.cursor.execute(sql) self.db.commit() self.nameInput.clear() self.loadTable() except: self.db.rollback() QMessageBox.warning(self, "Error", "添加记录失败") else: QMessageBox.warning(self, "Error", "姓名不能为空") def closeEvent(self, event): self.cursor.close() self.db.close() if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 上述代码实现了一个简单的GUI界面,包含一个用于输入姓名的文本框和一个用于添加记录的按钮。数据存储在MySQL数据库的`students`表中,其中包含`id`和`name`两个字段。点击添加按钮后将会将姓名插入到数据库中,并更新显示在表格中。表格使用QTableWidget来显示。通过`PyMySQL`模块连接和操作数据库。 ### 回答3: 以下是使用PyQt5和PyMySQL模块实现简单的增删改查的代码示例: ```python import pymysql from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QPushButton, QVBoxLayout, QWidget class DatabaseWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("数据库操作") self.setGeometry(100, 100, 400, 300) self.table_widget = QTableWidget() self.setCentralWidget(self.table_widget) self.btn_refresh = QPushButton("刷新") self.btn_refresh.clicked.connect(self.refresh_data) self.btn_add = QPushButton("添加") self.btn_add.clicked.connect(self.add_data) self.btn_delete = QPushButton("删除") self.btn_delete.clicked.connect(self.delete_data) self.btn_update = QPushButton("更新") self.btn_update.clicked.connect(self.update_data) layout = QVBoxLayout() layout.addWidget(self.btn_refresh) layout.addWidget(self.btn_add) layout.addWidget(self.btn_delete) layout.addWidget(self.btn_update) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) self.db = pymysql.connect(host='localhost', user='root', password='password', db='testdb') self.cursor = self.db.cursor() self.refresh_data() def refresh_data(self): self.table_widget.clear() self.cursor.execute("SELECT * FROM users") data = self.cursor.fetchall() self.table_widget.setRowCount(len(data)) self.table_widget.setColumnCount(len(data[0])) for i, row in enumerate(data): for j, value in enumerate(row): item = QTableWidgetItem(str(value)) self.table_widget.setItem(i, j, item) def add_data(self): self.cursor.execute("INSERT INTO users (name, age) VALUES ('John', 30)") self.db.commit() self.refresh_data() def delete_data(self): selected_row = self.table_widget.currentRow() id = self.table_widget.item(selected_row, 0).text() self.cursor.execute(f"DELETE FROM users WHERE id={id}") self.db.commit() self.refresh_data() def update_data(self): selected_row = self.table_widget.currentRow() id = self.table_widget.item(selected_row, 0).text() self.cursor.execute(f"UPDATE users SET name='Mike', age=25 WHERE id={id}") self.db.commit() self.refresh_data() if __name__ == '__main__': app = QApplication([]) window = DatabaseWindow() window.show() app.exec_() ``` 此示例展示了一个使用PyQt5和PyMySQL模块实现的简单的数据库操作窗口。窗口中包含一个表格用于显示数据库中的数据。通过点击不同按钮,可以刷新数据,添加数据,删除数据和更新数据。代码中的数据库连接参数需要根据实际情况进行修改。

相关推荐

最新推荐

recommend-type

基于VB实现的商场管理系统设计(源代码+系统).zip

【作品名称】:基于VB实现的商场管理系统设计(源代码+系统) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。
recommend-type

数据更新至2020年主要发电企业火电机组分容量等级发电装机容量情况.xls

数据来源:中国电力统计NJ-2021版
recommend-type

数据更新至2020年电网建设 本年开工规模.xls

数据来源:中国电力统计NJ-2021版
recommend-type

基于C# WinForm框架开发的图书管理系统源码+sql文件.zip

基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip
recommend-type

毕业设计(论文)-基于Android系统的人事管理系统设计与实现(48页).doc

毕业设计(论文)-基于Android系统的人事管理系统设计与实现(48页).doc
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

输出删除n个数字,使得被删后的数字最小

对于这个问题,我可以提供一个基于贪心算法的解法。具体来说,我们可以首先遍历一遍数字序列,从左往右找到第一个比它右边的数字大的位置,然后删除这个位置的数字,并重置遍历起点为当前位置。重复这个过程,直到已经删除了n个数字或者数字序列已经被完全遍历。 代码实现如下: ``` def remove_digits(num, n): result = [] for i in range(len(num)): while n > 0 and result and result[-1] > num[i]: result.pop()
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。