PyQt5 QtSql – Python

PyQt5 QtSql – Python

PyQt为我们提供了UI功能,这些功能在很多方面都很有用,可以使用PyQt的所有功能和部件来构建我们的应用程序。此外,PyQt还为我们提供了将数据库集成到我们的应用程序中的功能。我们可以通过它整合任何数据库,其中包括MySQL、SQLITE等。

为了将SQL数据库与PyQt5应用程序连接起来,我们使用了 QtSql 模块。SQL类分为三层:
1. 驱动层: 它有QSqlDriver、QSqlDriverCreatorBase和QSqlResult类。
2. SQL API层: 它们提供对数据库的访问。对于连接,QSqlDatabase被使用,与数据库的交互由QSqlQuery类完成。
3. 用户界面层: 这些与Qt的模型框架一起工作。其中一些是QSqlQueryModel、QSqlTableModel等。

要导入模块,需要使用以下命令。

 from PyQt5 import QtSql

用于与数据库的连接

self.QSqlDatabase.addDatabase("QMYSQL")
self.db.setHostName("geeksforgeeks")
self.db.setDatabaseName("gfgdb")
self.db.setUserName("geeks")
self.db.setPassword("gfg")

第一个参数QSqlDatabase.addDatabase用于添加驱动程序(例如,QPSQL、QMYSQL、QOCI、QODBC、QSQLITE等)。接下来的四个命令setHostName(), setDatabaseName(), setUserName(), setPassword()都是初始化数据库连接。QSqlDatabase.open()被调用以打开数据库,并在初始化后访问它。

执行MySQL查询

self.qry = QString("SELECT * FROM employee")
self.query = QSqlQuery()
self.query.prepare(self.qry)
self.query.exec()

QSqlQuery类提供exec()方法来执行查询。

现在,为了以表格的形式 获取结果 ,我们使用了以下代码序列。

for row_number, row_data in enumerate(self.query.result()):
      for column_number, data in enumerate(row_data):
           self.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(data)

下面只显示了一种类型的查询,但以同样的方式也可以执行 插入、删除、更新 查询,你只需要替换self.qry变量中的查询。命名为fgdb的数据库应该有一个命名为雇员的表。

PyQt5 QtSql - Python

例子

# Write Python3 code here
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql
  
class Ui_MainWindow(object): have 
  
  
    def setupUi(self, MainWindow):
        # Setting mainwindow
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(432, 813)
        MainWindow.setMinimumSize(QtCore.QSize(432, 813))
        MainWindow.setMaximumSize(QtCore.QSize(432, 813))
          
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 781, 821))
          
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
          
        # setting up the output table
        self.tableWidget = QtWidgets.QTableWidget(self.frame)
        self.tableWidget.setGeometry(QtCore.QRect(0, 10, 431, 731))
        self.tableWidget.setRowCount(10)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setObjectName("tableWidget")
          
        # initializing items to be added in the table
        item = QtWidgets.QTableWidgetItem()
        item1 = QtWidgets.QTableWidgetItem()
        # inserting above items to the table
        self.tableWidget.setHorizontalHeaderItem(0, item)
        self.tableWidget.setHorizontalHeaderItem(1, item1)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(185)
        self.tableWidget.verticalHeader().setMinimumSectionSize(50)
        MainWindow.setCentralWidget(self.centralwidget)
  
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
          
        # connection to the database
        self.QSqlDatabase.addDatabase("QMYSQL")
        self.db.setHostName("geeksforgeeks")
        self.db.setDatabaseName("gfgdb")
        self.db.setUserName("geeks")
        self.db.setPassword("gfg")
        # executing MySql query
        self.qry = QString("SELECT * FROM employee")
        self.query = QSqlQuery()
        self.query.prepare(self.qry)
        self.query.exec()
          
        # displaying output of query in the table
        for row_number, row_data in enumerate(self.query.result()):
            for column_number, data in enumerate(row_data):
                self.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(data) 
  
          
      
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "List of All Employee(GFGdb)"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "NAME"))
        item1 = self.tableWidget.horizontalHeaderItem(1)
        item1.setText(_translate("MainWindow", "SALARY"))
  
  
if __name__ == "__main__":
      
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

输出:

PyQt5 QtSql - Python

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程