当前位置: 首页 > news >正文

PyQt5创建与MySQL数据库集成的应用程序

最近,对之前的mysql管理系统进行了更新升级,制作了一版关于车牌的管理系统!

(1)实现了对车牌和用户基本信息的增删改查的功能 !

(2)加入了对数据库的刷新和状态显示功能

(3)加入了完善的日志系统

(4)有导出功能(需要输入管理员密码)

在本教程中,我们将学习如何创建一个使用PyQt5的应用程序,该应用程序连接到MySQL数据库并执行基本的CRUD(创建、读取、更新、删除)操作。我们将涵盖以下步骤:

  1. 设置PyQt5应用程序
  2. 连接到MySQL数据库
  3. 在表格中显示数据
  4. 插入数据到数据库
  5. 更新数据库中的数据
  6. 删除数据库中的数据
  7. 将数据导出到Excel文件

一、创建一个主窗口类,继承自QMainWindow,并设置基本的UI:

from PyQt5.QtWidgets import QApplication, QMainWindowclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.setWindowTitle("PyQt5 MySQL示例")self.setGeometry(100, 100, 800, 600)if __name__ == "__main__":import sysapp = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

二、连接到MySQL数据库

import pymysqlclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.setWindowTitle("PyQt5 MySQL示例")self.setGeometry(100, 100, 800, 600)self.db = self.create_connection()def create_connection(self):try:connection = pymysql.connect(host="localhost",  # 数据库主机名user="root",       # 数据库用户名password="yourpassword",  # 数据库密码database="yourdatabase"   # 数据库名)print("成功连接到数据库")  # 连接成功时打印信息return connection  # 返回数据库连接对象except pymysql.MySQLError as e:print(f"连接数据库失败: {e}")  # 连接失败时打印错误信息return None  # 返回None表示连接失败

三、在表格中显示数据

from PyQt5.QtWidgets import QTableWidget, QTableWidgetItemclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.setWindowTitle("PyQt5 MySQL示例")self.setGeometry(100, 100, 800, 600)self.db = self.create_connection()self.table = QTableWidget(self)self.table.setGeometry(50, 50, 700, 500)self.search_all_data()def search_all_data(self):if self.db is None:returncursor = self.db.cursor()cursor.execute("SELECT name, sex, number, license, extime FROM yourtable")results = cursor.fetchall()self.table.setRowCount(len(results))self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels(['姓名', '性别', '电话', '车牌号', '有效期'])for row_num, row_data in enumerate(results):for col_num, data in enumerate(row_data):self.table.setItem(row_num, col_num, QTableWidgetItem(str(data)))

四、插入数据到数据库

from PyQt5.QtWidgets import QPushButton, QLineEdit, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.setWindowTitle("PyQt5 MySQL示例")self.setGeometry(100, 100, 800, 600)self.db = self.create_connection()self.table = QTableWidget(self)self.table.setGeometry(50, 50, 700, 400)self.input_name = QLineEdit(self)self.input_name.setPlaceholderText("姓名")self.input_sex = QLineEdit(self)self.input_sex.setPlaceholderText("性别")self.input_number = QLineEdit(self)self.input_number.setPlaceholderText("电话")self.input_license = QLineEdit(self)self.input_license.setPlaceholderText("车牌号")self.input_extime = QLineEdit(self)self.input_extime.setPlaceholderText("有效期 (YYYY-MM-DD)")self.add_button = QPushButton("添加", self)self.add_button.clicked.connect(self.insert_data)layout = QVBoxLayout()layout.addWidget(self.input_name)layout.addWidget(self.input_sex)layout.addWidget(self.input_number)layout.addWidget(self.input_license)layout.addWidget(self.input_extime)layout.addWidget(self.add_button)container = QWidget()container.setLayout(layout)container.setGeometry(50, 500, 700, 100)self.setCentralWidget(container)self.search_all_data()def insert_data(self):name = self.input_name.text()sex = self.input_sex.text()number = self.input_number.text()license = self.input_license.text()extime = self.input_extime.text()if self.db is None:returncursor = self.db.cursor()insert_sql = "INSERT INTO yourtable (name, sex, number, license, extime) VALUES (%s, %s, %s, %s, %s)"cursor.execute(insert_sql, (name, sex, number, license, extime))self.db.commit()self.search_all_data()

五、更新数据库中的数据

def update_data(self, id, name, sex, number, license, extime):if self.db is None:returncursor = self.db.cursor()update_sql = "UPDATE yourtable SET name=%s, sex=%s, number=%s, license=%s, extime=%s WHERE id=%s"cursor.execute(update_sql, (name, sex, number, license, extime, id))self.db.commit()self.search_all_data()

六、删除数据库中的数据

def delete_data(self, id):if self.db is None:returncursor = self.db.cursor()delete_sql = "DELETE FROM yourtable WHERE id=%s"cursor.execute(delete_sql, (id,))self.db.commit()self.search_all_data()

七、将数据导出到Excel文件

import pandas as pd
from PyQt5.QtWidgets import QFileDialogdef export_data(self):if self.db is None:returncursor = self.db.cursor()cursor.execute("SELECT * FROM yourtable")results = cursor.fetchall()df = pd.DataFrame(results, columns=['ID', '姓名', '性别', '电话', '车牌号', '有效期'])file_path, _ = QFileDialog.getSaveFileName(self, '保存Excel文件', '', 'Excel 文件 (*.xlsx)')if file_path:df.to_excel(file_path, index=False)

通过以上步骤,你已经学会了如何使用PyQt5创建一个连接MySQL数据库的应用程序,并实现基本的CRUD操作和数据导出功能。你可以根据需要扩展和定制这个应用程序。

有任何需要请私信我!私信,私信!

相关文章:

  • 利用ssh远程安装显卡驱动
  • 铁塔基站用能监控能效解决方案
  • 链表(2)反转链表
  • 字符串匹配算法(三)Trie树算法
  • 长难句打卡5.31
  • 闽盾杯 2021 DNS协议分析
  • 初识Sass
  • openfiler安装部署-1
  • 速盾:cdn如何收费?
  • 云数融合与大数据技术在日常生活中的创新应用探索
  • 【环境栏Composer】Composer常见问题(持续更新)
  • sql server 2017 linux 高可用创建和故障转移
  • Oracle 数据库 varchar2 从 4000 扩展到 32k
  • 矩阵1-范数与二重求和的求和可交换
  • Node.js笔记(万字总结)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 03Go 类型总结
  • Angular6错误 Service: No provider for Renderer2
  • Django 博客开发教程 8 - 博客文章详情页
  • ERLANG 网工修炼笔记 ---- UDP
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Git初体验
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Just for fun——迅速写完快速排序
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • log4j2输出到kafka
  • vagrant 添加本地 box 安装 laravel homestead
  • vue2.0项目引入element-ui
  • 大型网站性能监测、分析与优化常见问题QA
  • 分享一份非常强势的Android面试题
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于webpack 的 vue 多页架构
  • 两列自适应布局方案整理
  • 前端面试题总结
  • 驱动程序原理
  • 以太坊客户端Geth命令参数详解
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 数仓建模:如何构建主题宽表模型?
  • #、%和$符号在OGNL表达式中经常出现
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (5)STL算法之复制
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (k8s中)docker netty OOM问题记录
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (回溯) LeetCode 78. 子集
  • (论文阅读40-45)图像描述1
  • (万字长文)Spring的核心知识尽揽其中
  • (转)Oracle 9i 数据库设计指引全集(1)