PyQt5 QtSql – Python

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_())

Producción:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *