PyQt5 读写MySQL数据库

在这里插入图片描述

import sys
from PyQt5.QtWidgets import QWidget,QApplication,QAbstractItemView,QMessageBox,QTableWidgetItem
from PyQt5.QtCore import pyqtSlot
from MySQL import Ui_MySQL
from PyQt5.QtSql import QSqlDatabase,QSqlQueryModel,QSqlQuery

class NameTableItem(QTableWidgetItem):
    def __init__(self,text,id):
        super().__init__(text)
        self.__id = id
    def getID(self):
        return self.__id

class MySQLWgt(QWidget):
    def __init__(self,parent = None):
        super().__init__(parent)
        self.ui = Ui_MySQL()
        self.ui.setupUi(self)
        self.initDB()
        self.initTableWidget()
        self.initTable()
        self.ui.pushButtonAdd.clicked.connect(self.slotAdd)
        self.ui.pushButtonDelete.clicked.connect(self.slotDelete)

    def initDB(self):
        self.db = QSqlDatabase.addDatabase('QMYSQL')
        self.db.setDatabaseName('aaa')
        self.db.setHostName('127.0.0.1')
        self.db.setPort(3306)
        self.db.setUserName('root')
        self.db.setPassword('123456')
        if not self.db.open():  # 判断数据库是否打开
            QMessageBox.critical(None, ('无法打开数据库'), ('无法建立连接,需要配置'), QMessageBox.Cancel)
            return False

    def initTableWidget(self):
        self.ui.tableWidget.setColumnCount(3)
        self.ui.tableWidget.setColumnWidth(0, 100)
        self.ui.tableWidget.setColumnWidth(1, 100)
        self.ui.tableWidget.setColumnWidth(2, 100)

        heads = ['姓名','性别','年龄']
        self.ui.tableWidget.setHorizontalHeaderLabels(heads)
        self.ui.tableWidget.verticalHeader().setDefaultSectionSize(22)
        self.ui.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)
        self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows);

    def initTable(self):
        self.queryDB = QSqlQuery(self.db)
        self.queryDB.exec('select * from student;')

        row = 0
        while(self.queryDB.next()):
            self.ui.tableWidget.insertRow(row)
            nameItem = NameTableItem(str(self.queryDB.value(1)),int(self.queryDB.value(0)))
            self.ui.tableWidget.setItem(row,0,nameItem)
            self.ui.tableWidget.setItem(row, 1, QTableWidgetItem(self.queryDB.value(2)))
            self.ui.tableWidget.setItem(row, 2, QTableWidgetItem(str(self.queryDB.value(3))))
            row += 1

    def slotAdd(self):
        pass

    def slotDelete(self):
        if QMessageBox.Ok == QMessageBox.critical(None, ('删除'), ('确定要删除这条记录吗'), QMessageBox.Cancel, QMessageBox.Ok):
            curIdx = self.ui.tableWidget.currentRow()
            nameItem = self.ui.tableWidget.item(curIdx,0)
            id = nameItem.getID()
            self.queryDB = QSqlQuery(self.db)
            deleteSQL = "delete from student where f_master_id = {};".format(id)
            self.queryDB.exec(deleteSQL)
            self.ui.tableWidget.removeRow(curIdx)


if __name__ == "__main__":
    print(QSqlDatabase.drivers())
    app = QApplication(sys.argv)
    wgt = MySQLWgt()
    wgt.show()
    sys.exit(app.exec_())

在使用PyQt5进行数据库操作的时候,一定要注意Python的版本和PyQt5的版本。现在使用的版本是Python3.7和PyQt5.10。

如果在运行的时候,程序突然退出,或者挂掉,而且也没有输出任何信息,可以通过设置
在这里插入图片描述
在PyCharm中输出信息,查看具体的内容
aaa

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wb175208

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

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

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

打赏作者

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

抵扣说明:

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

余额充值