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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章