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操作和数据导出功能。你可以根据需要扩展和定制这个应用程序。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/338406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有知网资源如何快速下载知网论文

今天有位同学求助一篇知网论文,“球磨-点击化学反应:无溶剂绿色反应方式”,其实下载知网论文是一件非常简单的事情,下面小编就把如何在家轻松查找下载知网论文的方法给大家演示一遍。 一、首先你需要获取知网使用权限&#xff0c…

css特殊效果和页面布局

特殊效果 圆角边框:div{border-radius: 20px 10px 50px 30px;} 四个属性值按顺时针排列,左上的1/4圆半径为20px,右上10,右下50,左下30。 div{border-radius: 20px;} 四角都为20px。 div{border-radius: 20px 10…

Maven配置

Maven – Download Apache Maven https://maven.apache.org/install.html 得下载有 bin的

MongoDB~俩大特点管道聚合和数据压缩(snappy)

场景 在MySQL中,通常会涉及多个表的一些操作,MongoDB也类似,有时需要将多个文档甚至是多个集合汇总到一起计算分析(比如求和、取最大值)并返回计算后的结果,这个过程被称为 聚合操作 。 根据官方文档介绍&…

Facebook开户 | Facebook二不限户

Facebook二不限户的正确使用方法 Facebook 二不限是指 Facebook 国内二不限户,是通过代理开出来的一种特殊账户,️需要广告主准备主页。 其特点是:限主页、不限域名、额度没解限,解限后则不限额度。 相比于三不限户,…

Notepad++不显示CRLF的方法

View -> Show Symbol -> 去掉勾选 Show All Characters

threejs 场景构建技巧与优化策略探讨

threejs 场景构建技巧与优化策略探讨 一、引言 在使用 Three.js 进行三维场景开发时,艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨:如何高效地构建场景并实现良好的性能表现是至关重要的。本文将深入探讨一些场景构建的技巧以及…

LabVIEW在高校电力电子实验中的应用

概述:本文介绍了如何利用LabVIEW优化高校电力电子实验,通过图形化编程实现参数调节、实时数据监控与存储,并与Simulink联动,提高实验效率和数据处理能力。 需求背景高校实验室在进行电机拖动和电力电子实验时,通常使用…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议,在传输之前需要形成三次握手形成会话 只有会话形成了,服务端和客户端才能想发送数据,在创建会话的过程中,服务端和客户…

关于如何通过APlayer+MetingJS为自己的wordpress博客网页添加网易音乐播放器(无需插件)

本文转自博主的个人博客:https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接:点我访问 序言:最近在网上冲浪,发现大家的博客大部分都有一个音乐播放器能够播放音乐,随机我也开始寻找解决方法。可是找来找去我…

已解决java.nio.charset.CoderMalfunctionError: 编码器故障错误的正确解决方法,亲测有效!!!

已解决java.nio.charset.CoderMalfunctionError: 编码器故障错误的正确解决方法,亲测有效!!! 亲测有效 报错问题解决思路解决方法1. 检查和清理输入数据2. 选择正确的字符集3. 处理异常情况4. 更新Java版本或库5. 检查第三方库的依…

Java | Leetcode Java题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int[] prices) {int n prices.length;int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < n; i) {buy1 Math.max(buy1, -prices[i]);sell1 Math.max(sell1, b…

p2p文件传输小工具

使用webRTC的相关技术栈可以很轻松的开发一个p2p文件传输工具&#xff0c;这里主要讲下使用datachannel开发的一个文件传输工具client程序的使用 客户端A&#xff1a;需要可以访问公网&#xff0c;运行client的主机 客户端B&#xff1a;可以访问公网&#xff0c;可以和客户端…

【Linux】 深入讲解自动化构建工具

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Linux一系列的文章&#xff08;质量分均在93分 以…

JavaScript倍速播放视频

F12打开开发者工具&#xff0c;打开控制台&#xff0c;输入这行代码&#xff0c;视频即可加速播放&#xff0c; 可以调整倍速&#xff08;2&#xff0c;4&#xff0c;8&#xff0c;16&#xff09; document. getElementsByTagName("video")[0]. playbackRate16

数论1---整除

概念与基本性质就不说了 例题1&#xff1a;已知a|n&#xff0c;b|n.且axby1,求证&#xff1a;ab|n 即&#xff1a; 所以&#xff1a;ab|n 例题2&#xff1a;设m是一个大于2的正整数&#xff0c;证明&#xff1a;对于任意正整数n&#xff0c;都有 由于我不想打公式了直接拍照…

基于 IP 的 DDOS 攻击实验

一、介绍 基于IP的分布式拒绝服务&#xff08;Distributed Denial of Service, DDoS&#xff09;攻击是一种利用大量受控设备&#xff08;通常是僵尸网络&#xff09;向目标系统发送大量请求或数据包&#xff0c;以耗尽目标系统的资源&#xff0c;导致其无法正常提供服务的攻击…

[图解]企业应用架构模式2024新译本讲解06-表模块3

1 00:00:00,800 --> 00:00:03,470 接下来&#xff0c;我们来看这个序列图 2 00:00:04,400 --> 00:00:05,740 因为序列图比较大 3 00:00:06,180 --> 00:00:09,770 我们就不好放在幻灯片里面来看了 4 00:00:11,060 --> 00:00:12,130 下面还有很多 5 00:00:13,950…

制作ChatPDF之Elasticsearch8.13.4搭建(一)

Elasticsearch8.x搭建 在Windows系统上本地安装Elasticsearch的详细步骤如下&#xff1a; 1. 下载Elasticsearch 访问 Elasticsearch下载页面。选择适用于Windows的版本8.13.4&#xff0c;并下载ZIP文件。 2. 解压文件 下载完成后&#xff0c;找到ZIP文件&#xff08;例如…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 基本要求&#xff1a;下图3选1&#xff0c;完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求&#xff1a;2个选一个完成&#xff0c;多做1个加2分。 请用班级学号姓…