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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RMB Player

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值