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的数据库应该有一个命名为雇员的表。
例子 。
# 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_())
输出: