PyQt nos proporciona funciones de interfaz de usuario que pueden ser útiles de varias maneras para crear nuestras aplicaciones utilizando todas las funciones y widgets de PyQt. Además, PyQt nos brinda la posibilidad de integrar nuestra base de datos en nuestra aplicación. Podemos integrar cualquier base de datos a través de ella, algunas de ellas son: MySQL, SQLITE, etc.
Para vincular la base de datos SQL con la aplicación PyQt5 , se utiliza el módulo QtSql. Las clases SQL se dividen en tres capas:
1. Capa del controlador: tiene las clases QSqlDriver, QSqlDriverCreatorBase y QSqlResult .
2. Capa API de SQL: proporcionan acceso a las bases de datos. Para la conexión se usa QSqlDatabase , la interacción con la base de datos se realiza mediante la clase QSqlQuery .
3. Capa de interfaz de usuario: funcionan con el marco del modelo de Qt. Algunos de ellos son QSqlQueryModel, QSqlTableModel, etc.
Para importar el módulo se utiliza el siguiente comando:
from PyQt5 import QtSql
Para la conexión a bases de datos
self.QSqlDatabase.addDatabase("QMYSQL") self.db.setHostName("geeksforgeeks") self.db.setDatabaseName("gfgdb") self.db.setUserName("geeks") self.db.setPassword("gfg")
El primer argumento QSqlDatabase.addDatabase se usa para agregar controladores (por ejemplo, QPSQL, QMYSQL, QOCI, QODBC, QSQLITE, etc.). Los siguientes cuatro comandos setHostName(), setDatabaseName(), setUserName() y setPassword() inicializan la conexión de la base de datos. Se llama a QSqlDatabase.open() para abrir la base de datos y acceder a ella una vez inicializada.
Ejecutando Consulta MySQL
self.qry = QString("SELECT * FROM employee") self.query = QSqlQuery() self.query.prepare(self.qry) self.query.exec()
La clase QSqlQuery proporciona el método exec() para ejecutar la consulta.
Ahora, para obtener los resultados en forma de tabla, se usa la siguiente secuencia de código:
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)
A continuación, solo se muestra un tipo de consulta, pero de la misma manera también se pueden ejecutar las consultas Insertar, Eliminar, Actualizar , debe reemplazar solo la consulta en la variable self.qry . La base de datos que nombra gfgdb debe estar allí con una tabla que nombra a employee.
Ejemplo:
# 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_())
Publicación traducida automáticamente
Artículo escrito por Pragya_Chaurasia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA