Bootstrap

QT +MYSQL+PYTHON,完成一个数据库表的增删改查

ui_form.py


# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.8.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QCheckBox, QHeaderView, QPushButton,
    QSizePolicy, QTableView, QWidget)
    
    
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
    
'''
class Ui_Widget(object):
    def setupUi(self, Widget):
        if not Widget.objectName():
            Widget.setObjectName(u"Widget")
        Widget.resize(834, 286)
        self.checkBox = QCheckBox(Widget)
        self.checkBox.setObjectName(u"checkBox")
        self.checkBox.setGeometry(QRect(20, 30, 80, 19))
        self.pushButton = QPushButton(Widget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(30, 160, 75, 23))
        self.tableView = QTableView(Widget)
        self.tableView.setObjectName(u"tableView")
        self.tableView.setGeometry(QRect(120, 40, 671, 192))

        self.retranslateUi(Widget)

        QMetaObject.connectSlotsByName(Widget)
    # setupUi

    def retranslateUi(self, Widget):
        Widget.setWindowTitle(QCoreApplication.translate("Widget", u"Widget", None))
        self.checkBox.setText(QCoreApplication.translate("Widget", u"CheckBox", None))
        self.pushButton.setText(QCoreApplication.translate("Widget", u"\u6309\u94ae", None))
    # retranslateUi
    '''
    
class Ui_Widget(object):
    def setupUi(self, Widget):
        if not Widget.objectName():
            Widget.setObjectName(u"Widget")
        Widget.resize(600, 400)
        
        # 主布局
        self.verticalLayout = QVBoxLayout(Widget)
        
        # QTableView
        self.tableView = QTableView(Widget)
        self.verticalLayout.addWidget(self.tableView)
        
        # 输入框布局
        self.formLayout = QFormLayout()
        
        # ID
        self.lineEdit_id = QLineEdit(Widget)
        self.formLayout.setWidget(0, QFormLayout.LabelRole, QLabel("ID"))
        self.formLayout.setWidget(0, QFormLayout.FieldRole, self.lineEdit_id)
        
        # Name
        self.lineEdit_name = QLineEdit(Widget)
        self.formLayout.setWidget(1, QFormLayout.LabelRole, QLabel("Name"))
        self.formLayout.setWidget(1, QFormLayout.FieldRole, self.lineEdit_name)
        
        # Password
        self.lineEdit_password = QLineEdit(Widget)
        self.lineEdit_password.setEchoMode(QLineEdit.Password)
        self.formLayout.setWidget(2, QFormLayout.LabelRole, QLabel("Password"))
        self.formLayout.setWidget(2, QFormLayout.FieldRole, self.lineEdit_password)
        
        self.verticalLayout.addLayout(self.formLayout)
        
        # 按钮布局
        self.buttonLayout = QHBoxLayout()
        
        # 查询按钮
        self.pushButton_query = QPushButton("查询", Widget)
        self.buttonLayout.addWidget(self.pushButton_query)
        
        # 添加按钮
        self.pushButton_add = QPushButton("添加", Widget)
        self.buttonLayout.addWidget(self.pushButton_add)
        
        # 更新按钮
        self.pushButton_update = QPushButton("更新", Widget)
        self.buttonLayout.addWidget(self.pushButton_update)
        
        # 删除按钮
        self.pushButton_delete = QPushButton("删除", Widget)
        self.buttonLayout.addWidget(self.pushButton_delete)
        
        self.verticalLayout.addLayout(self.buttonLayout)
        
        # 设置控件名称(可选)
        self.retranslateUi(Widget)

    def retranslateUi(self, Widget):
        Widget.setWindowTitle(QCoreApplication.translate("Widget", u"数据库操作界面", None))

import sys
from PySide6.QtWidgets import QApplication, QWidget, QMessageBox, QTableView
from PySide6.QtGui import QStandardItemModel, QStandardItem
import pymysql as p

from ui_form import Ui_Widget  # 引入 UI 文件生成的类

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_Widget()
        self.ui.setupUi(self)

        # 连接按钮点击事件到槽函数
        self.ui.pushButton_query.clicked.connect(self.query_records)
        self.ui.pushButton_add.clicked.connect(self.add_record)
        self.ui.pushButton_update.clicked.connect(self.update_record)
        self.ui.pushButton_delete.clicked.connect(self.delete_record)

    def query_records(self):
        conn = p.connect(host='mysql.sqlpub.com', port=3306, user='laocooon',
                         passwd='fc12f7a5215e8e0a', db='huangjin')
        cur = conn.cursor()

        try:
            sql = "SELECT * FROM user1"
            cur.execute(sql)

            result = cur.fetchall()

            # 创建模型
            model = QStandardItemModel(len(result), len(result[0]))
            model.setHorizontalHeaderLabels(["ID", "Name", "Password"])

            # 填充数据到模型
            for row_idx, row_data in enumerate(result):
                for col_idx, item in enumerate(row_data):
                    model.setItem(row_idx, col_idx, QStandardItem(str(item)))

            self.ui.tableView.setModel(model)

        except Exception as e:
            QMessageBox.critical(self, "数据库错误", f"查询失败: {e}")
        finally:
            cur.close()
            conn.close()

    def add_record(self):
        # 获取输入框中的数据
        user_id = self.ui.lineEdit_id.text()
        name = self.ui.lineEdit_name.text()
        password = self.ui.lineEdit_password.text()

        if not user_id or not name or not password:
            QMessageBox.warning(self, "输入错误", "所有字段都必须填写!")
            return

        conn = p.connect(host='mysql.sqlpub.com', port=3306, user='laocooon',
                         passwd='fc12f7a5215e8e0a', db='huangjin')
        cur = conn.cursor()

        try:
            sql = "INSERT INTO user1 (id, name, password) VALUES (%s, %s, %s)"
            cur.execute(sql, (user_id, name, password))

            conn.commit()
            QMessageBox.information(self, "成功", "记录添加成功!")
            self.query_records()  # 添加成功后刷新查询

        except Exception as e:
            conn.rollback()
            QMessageBox.critical(self, "数据库错误", f"添加失败: {e}")
        finally:
            cur.close()
            conn.close()

    def update_record(self):
        # 获取输入框中的数据
        user_id = self.ui.lineEdit_id.text()
        name = self.ui.lineEdit_name.text()
        password = self.ui.lineEdit_password.text()

        if not user_id or not name or not password:
            QMessageBox.warning(self, "输入错误", "所有字段都必须填写!")
            return

        conn = p.connect(host='mysql.sqlpub.com', port=3306, user='laocooon',
                         passwd='fc12f7a5215e8e0a', db='huangjin')
        cur = conn.cursor()

        try:
            sql = "UPDATE user1 SET name = %s, password = %s WHERE id = %s"
            cur.execute(sql, (name, password, user_id))

            conn.commit()
            QMessageBox.information(self, "成功", "记录更新成功!")
            self.query_records()  # 更新成功后刷新查询

        except Exception as e:
            conn.rollback()
            QMessageBox.critical(self, "数据库错误", f"更新失败: {e}")
        finally:
            cur.close()
            conn.close()

    def delete_record(self):
        user_id = self.ui.lineEdit_id.text()

        if not user_id:
            QMessageBox.warning(self, "输入错误", "ID不能为空!")
            return

        conn = p.connect(host='mysql.sqlpub.com', port=3306, user='laocooon',
                         passwd='fc12f7a5215e8e0a', db='huangjin')
        cur = conn.cursor()

        try:
            sql = "DELETE FROM user1 WHERE id = %s"
            cur.execute(sql, (user_id,))

            conn.commit()
            QMessageBox.information(self, "成功", "记录删除成功!")
            self.query_records()  # 删除成功后刷新查询

        except Exception as e:
            conn.rollback()
            QMessageBox.critical(self, "数据库错误", f"删除失败: {e}")
        finally:
            cur.close()
            conn.close()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = Widget()
    widget.show()
    sys.exit(app.exec())

;