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