PyQt5 读写MySQL数据库
import sysfrom PyQt5.QtWidgets import QWidget,QApplication,QAbstractItemView,QMessageBox,QTableWidgetItemfrom PyQt5.QtCore import pyqtSlotfrom MySQL import Ui_MySQLfrom PyQt5.QtSql import QSqlDatabase
·
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
更多推荐
所有评论(0)