PyQt bietet uns UI-Funktionen, die auf vielfältige Weise nützlich sein können, um unsere Anwendungen mit allen Funktionen und Widgets von PyQt zu erstellen. Darüber hinaus bietet PyQt die Möglichkeit, unsere Datenbank in unsere Anwendung zu integrieren. Wir können jede Datenbank darüber integrieren, einige davon sind MySQL, SQLITE usw.

Zum Verknüpfen der SQL-Datenbank mit der PyQt5-Anwendung wird das QtSql- Modul verwendet. Die SQL-Klassen sind in drei Schichten unterteilt:
1. Treiberschicht : Sie verfügt über die Klassen QSqlDriver, QSqlDriverCreatorBase und QSqlResult .
2. SQL API Layer: Diese bieten Zugriff auf Datenbanken. Für die Verbindung wird QSqlDatabase verwendet. Die Interaktion mit der Datenbank wird von der QSqlQuery- Klasse durchgeführt.
3. User Interface Layer: Diese funktionieren mit dem Qt-Modellframework. Einige von ihnen sind QSqlQueryModel, QSqlTableModel usw.

Zum Importieren des Moduls wird folgender Befehl verwendet:

 aus PyQt5 QtSql importieren

Zum Anschluss an Datenbanken

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

Erstes Argument QSqlDatabase.addDatabase wird zum Hinzufügen von Treibern verwendet (z. B. QPSQL, QMYSQL, QOCI, QODBC, QSQLITE usw.). Alle nächsten vier Befehle setHostName(), setDatabaseName(), setUserName() und setPassword() initialisieren die Datenbankverbindung. QSqlDatabase.open() wird aufgerufen, um die Datenbank zu öffnen und nach der Initialisierung darauf zuzugreifen.



MySQL-Abfrage ausführen

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

Die QSqlQuery-Klasse bietet die Methode exec() zum Ausführen der Abfrage.

Nun, um die Ergebnisse zu holen in der Form von Tabelle folgenden Sequenz von Code dann verwendet wird :

für row_number row_data in enumerate (self.query.result()):
      für Spaltennummer Daten in Aufzählung (Zeilendaten):
           self.tableWidget.setItem (Zeilennummer, Spaltennummer, QtWidgets.QTableWidgetItem (Daten)

Im Folgenden wird nur ein Abfragetyp angezeigt. Auf die gleiche Weise können auch Abfragen zum Einfügen, Löschen und Aktualisieren ausgeführt werden. Sie müssen nur die Abfrage in der Variablen self.qry ersetzen . Die Datenbankbenennung gfgdb sollte dort vorhanden sein und einen Mitarbeiter mit Tabellennamen haben.

Beispiel:

import sys 
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql 
  
class Ui_MainWindow(object): have  
  
  
    def setupUi(self, 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") 
          
        
        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") 
          
        
        item = QtWidgets.QTableWidgetItem() 
        item1 = QtWidgets.QTableWidgetItem() 
        
        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) 
          
        
        self.QSqlDatabase.addDatabase("QMYSQL") 
        self.db.setHostName("geeksforgeeks") 
        self.db.setDatabaseName("gfgdb") 
        self.db.setUserName("geeks") 
        self.db.setPassword("gfg") 
        
        self.qry = QString("SELECT * FROM employee") 
        self.query = QSqlQuery() 
        self.query.prepare(self.qry) 
        self.query.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)  
  
          
      
    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_()) 

Ausgabe: