最近,对之前的mysql管理系统进行了更新升级,制作了一版关于车牌的管理系统!
(1)实现了对车牌和用户基本信息的增删改查的功能 !
(2)加入了对数据库的刷新和状态显示功能
(3)加入了完善的日志系统
(4)有导出功能(需要输入管理员密码)
在本教程中,我们将学习如何创建一个使用PyQt5的应用程序,该应用程序连接到MySQL数据库并执行基本的CRUD(创建、读取、更新、删除)操作。我们将涵盖以下步骤:
- 设置PyQt5应用程序
- 连接到MySQL数据库
- 在表格中显示数据
- 插入数据到数据库
- 更新数据库中的数据
- 删除数据库中的数据
- 将数据导出到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操作和数据导出功能。你可以根据需要扩展和定制这个应用程序。
有任何需要请私信我!私信,私信!