赞
踩
最近,对之前的mysql管理系统进行了更新升级,制作了一版关于车牌的管理系统!
(1)实现了对车牌和用户基本信息的增删改查的功能 !
(2)加入了对数据库的刷新和状态显示功能
(3)加入了完善的日志系统
(4)有导出功能(需要输入管理员密码)
在本教程中,我们将学习如何创建一个使用PyQt5的应用程序,该应用程序连接到MySQL数据库并执行基本的CRUD(创建、读取、更新、删除)操作。我们将涵盖以下步骤:
一、创建一个主窗口类,继承自QMainWindow
,并设置基本的UI:
- from PyQt5.QtWidgets import QApplication, QMainWindow
-
- class MainWindow(QMainWindow):
- def __init__(self):
- super(MainWindow, self).__init__()
- self.setWindowTitle("PyQt5 MySQL示例")
- self.setGeometry(100, 100, 800, 600)
-
- if __name__ == "__main__":
- import sys
- app = QApplication(sys.argv)
- window = MainWindow()
- window.show()
- sys.exit(app.exec_())
二、连接到MySQL数据库
- import pymysql
-
- class 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, QTableWidgetItem
-
- class 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:
- return
-
- cursor = 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, QWidget
-
- class 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:
- return
-
- cursor = 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:
- return
-
- cursor = 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:
- return
-
- cursor = 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 QFileDialog
-
- def export_data(self):
- if self.db is None:
- return
-
- cursor = 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操作和数据导出功能。你可以根据需要扩展和定制这个应用程序。
有任何需要请私信我!私信,私信!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。