May-23-2022, 11:47 AM
(This post was last modified: May-23-2022, 11:47 AM by Axel_Erfurt.)
That's an example for QtSql
create Database
create Database
from PyQt5.QtSql import QSqlQuery, QSqlDatabase from PyQt5.QtWidgets import QMessageBox, QApplication, qApp def createDB(): db = QSqlDatabase.addDatabase('QSQLITE') db.setDatabaseName('inventory2.db') if not db.open(): QMessageBox.critical(None, qApp.tr("Cannot open database"), qApp.tr("Unable to establish a database connection.\n" "This example needs SQLite support. Please read " "the Qt SQL driver documentation for information " "how to build it.\n\n" "Click Cancel to exit."), QMessageBox.Cancel) return False query = QSqlQuery() query.exec_("""create table items (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, Quantity INT NOT NULL, Price DOUBLE NOT NULL, Sell_Price DOUBLE NOT NULL, Description TEXT, Category TEXT, Location TEXT, Length_Ft INT, Barcode INT, Image BLOB, Date Updated datetime default current_timestamp)""") query.exec_("insert into items values(0, 'MG996R ', '10', '5', '6', 'A Servo', 'Servos', 'S-1', '', '', '', '' )") query.exec_("insert into items values(1, 'MG997R ', '12', '6,45', '6,88', 'A Servo', 'Servos', 'S-1', '', '', '', '' )") return True if __name__ == '__main__': import sys app = QApplication(sys.argv) createDB()use it, changes are immediately transferred to the database.
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel from PyQt5.QtWidgets import (QApplication, QMainWindow, QDialog, QTableView, QGridLayout, QPushButton, QWidget) ################################### btnWidth = 100 class MyWindow(QMainWindow): def __init__(self, fileName, parent=None): super(MyWindow, self).__init__(parent) self.db = QSqlDatabase.addDatabase('QSQLITE') self.db.setDatabaseName('inventory2.db') self.model = QSqlTableModel() self.delrow = -1 self.initializeModel() self.sbar = self.statusBar() self.viewer = QTableView() self.viewer.setModel(self.model) self.viewer.clicked.connect(self.findrow) self.viewer.selectionModel().selectionChanged.connect(self.getCellText) self.dlg = QDialog() self.layout = QGridLayout() self.layout.addWidget(self.viewer,0, 0, 1, 3) button = QPushButton("add a row") button.setFixedWidth(btnWidth) button.clicked.connect(self.addrow) self.layout.addWidget(button, 1, 0) btn1 = QPushButton("delete a row") btn1.setFixedWidth(btnWidth) btn1.clicked.connect(self.delete_row) self.layout.addWidget(btn1,1, 1) self.myWidget = QWidget() self.myWidget.setLayout(self.layout) self.setCentralWidget(self.myWidget) self.setGeometry(0,0,800,550) self.setWindowTitle("Database Demo") self.sbar.showMessage("Ready") def initializeModel(self): self.model.setTable('items') self.model.setEditStrategy(QSqlTableModel.OnFieldChange) self.model.select() #self.model.setHeaderData(0, Qt.Horizontal, "Index") #self.model.setHeaderData(1, Qt.Horizontal, "Name") #self.model.setHeaderData(2, Qt.Horizontal, "Quantity") #self.model.setHeaderData(3, Qt.Horizontal, "Price") #self.model.setHeaderData(4, Qt.Horizontal, "Sell_Price") #self.model.setHeaderData(5, Qt.Horizontal, "Description") #self.model.setHeaderData(6, Qt.Horizontal, "Category") #self.model.setHeaderData(7, Qt.Horizontal, "Location") #self.model.setHeaderData(8, Qt.Horizontal, "Length_Ft ") #self.model.setHeaderData(9, Qt.Horizontal, "Barcode ") #self.model.setHeaderData(10, Qt.Horizontal, "Image ") #self.model.setHeaderData(11, Qt.Horizontal, "Date ") def addrow(self): print(self.model.rowCount()) ret = self.model.insertRows(self.model.rowCount(), 1) print(ret) def delete_row(self): row = self.viewer.currentIndex().row() self.model.removeRow(row) self.initializeModel() self.viewer.selectRow(row) def findrow(self, i): self.delrow = i.row() def getCellText(self): if self.viewer.selectedIndexes(): item = self.viewer.selectedIndexes()[0] row = self.selectedRow() column = self.selectedColumn() if not item == None: name = item.data() self.sbar.showMessage(str(name)) def selectedRow(self): if self.viewer.selectionModel().hasSelection(): row = self.viewer.selectionModel().selectedIndexes()[0].row() return int(row) def selectedColumn(self): column = self.viewer.selectionModel().selectedIndexes()[0].column() return int(column) ################################### if __name__ == "__main__": import sys app = QApplication(sys.argv) app.setApplicationName('MyWindow') main = MyWindow("") main.show() sys.exit(app.exec_())