Помогите создать метод добавления и удаления данных в bd, в таблицу с графическим отображением. PYTHON

Помогите пожалуйста реализовать добавление и удаление данных в таблице SQLITE. По кнопке добавить запись нужно как-то ввести запись и добавить её в базу данных, а по кнопке удалить запись, запись должна удаляться.

После удаления или добавления записей, графическое построение плана должно обновляться. сейчас скину код всех модулей, заранее благодарен всем участников форума за помощь.

файл mainWindow.py :

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1087, 593)
        MainWindow.setMinimumSize(QtCore.QSize(1087, 593))
        MainWindow.setMaximumSize(QtCore.QSize(1087, 593))
        MainWindow.setWindowTitle("Просмотр Плана Секции")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(845, 506, 209, 50))
        self.pushButton_4.setStyleSheet("font: 75 15pt \"MS Shell Dlg 2\";")
        self.pushButton_4.setObjectName("pushButton_4")

        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setEnabled(True)
        self.pushButton_8.setGeometry(QtCore.QRect(845, 300, 209, 50))
        self.pushButton_8.setAutoFillBackground(False)
        self.pushButton_8.setStyleSheet("font: 75 15pt \"MS Shell Dlg 2\";")
        self.pushButton_8.setObjectName("pushButton_8")

        self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_7.setGeometry(QtCore.QRect(845, 200, 209, 50))
        self.pushButton_7.setStyleSheet("font: 75 15pt \"MS Shell Dlg 2\";")
        self.pushButton_7.setObjectName("pushButton_7")

        self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
        self.graphicsView.setGeometry(QtCore.QRect(30, 20, 775, 535))
        self.graphicsView.setObjectName("graphicsView")
        '''''
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(650, 0, 71, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        '''''

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(230, 17, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")

        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(360, 17, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")

        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(495, 17, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")

        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(625, 17, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")


        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(625, 440, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")


        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(495, 440, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")

        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(360, 440, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")

        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(230, 440, 105, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")



        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        self.pushButton_4.setText(_translate("MainWindow", "Выход"))
        self.pushButton_8.setText(_translate("MainWindow", "Просмотр"))
        self.pushButton_7.setText(_translate("MainWindow", "Проживающие"))
        self.label.setText(_translate("MainWindow", "Комната 131"))
        self.label_2.setText(_translate("MainWindow", "Комната 132"))
        self.label_3.setText(_translate("MainWindow", "Комната 133"))
        self.label_4.setText(_translate("MainWindow", "Комната 134"))
        self.label_5.setText(_translate("MainWindow", "Комната 135"))
        self.label_6.setText(_translate("MainWindow", "Комната 136"))
        self.label_7.setText(_translate("MainWindow", "Комната 137"))
        self.label_8.setText(_translate("MainWindow", "Комната 138"))

файл lodgers.py :

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'lodgers.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtWidgets


class Ui_lodgers(object):
    def setupUi(self, lodgers):
        lodgers.setObjectName("lodgers")
        lodgers.resize(1087, 593)
        lodgers.setMinimumSize(QtCore.QSize(1087, 593))
        lodgers.setMaximumSize(QtCore.QSize(1087, 593))
        self.centralwidget = QtWidgets.QWidget(lodgers)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setEnabled(True)
        self.pushButton_8.setGeometry(QtCore.QRect(10, 530, 209, 40))
        self.pushButton_8.setAutoFillBackground(False)
        self.pushButton_8.setStyleSheet("font: 75 14pt \"MS Shell Dlg 2\";")
        self.pushButton_8.setObjectName("pushButton_8")

        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_9.setEnabled(True)
        self.pushButton_9.setGeometry(QtCore.QRect(600, 392, 209, 40))
        self.pushButton_9.setAutoFillBackground(False)
        self.pushButton_9.setStyleSheet("font: 75 14pt \"MS Shell Dlg 2\";")
        self.pushButton_9.setObjectName("pushButton_9")

        self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_10.setEnabled(True)
        self.pushButton_10.setGeometry(QtCore.QRect(850, 392, 209, 40))
        self.pushButton_10.setAutoFillBackground(False)
        self.pushButton_10.setStyleSheet("font: 75 14pt \"MS Shell Dlg 2\";")
        self.pushButton_10.setObjectName("pushButton_10")

        self.tableView_1 = QtWidgets.QTableView(self.centralwidget)
        self.tableView_1.setGeometry(QtCore.QRect(10, 20, 551, 411))
        self.tableView_1.setObjectName("tableView_1")
        lodgers.setCentralWidget(self.centralwidget)

        self.retranslateUi(lodgers)
        QtCore.QMetaObject.connectSlotsByName(lodgers)

    def retranslateUi(self, lodgers):
        _translate = QtCore.QCoreApplication.translate
        lodgers.setWindowTitle(_translate("lodgers", "Проживающие"))
        self.pushButton_8.setText(_translate("lodgers", "Назад"))
        self.pushButton_9.setText(_translate("RoomWindow", "Добавить запись"))
        self.pushButton_10.setText(_translate("RoomWindow", "Удалить запись"))

файл main.py :

import sys
from mainWindow import Ui_MainWindow
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtCore import Qt
from getRooms import Lodgers


class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.scene = QtWidgets.QGraphicsScene()
        self.setupUi(self)
        self.lodgers = Lodgers()
        self.lodgers.pushButton_8.clicked.connect(self.returnMainWindow1)

        self.rоом_beds = []
        self.rоом_rect = {
            '131': 0,
            '132': 1,
            '133': 2,
            '134': 3,
            '135': 4,
            '136': 5,
            '137': 6,
            '138': 7,
        }


        self.pushButton_7.clicked.connect(self.openlodgers)
        # Функция закрытия главного окна по кнопке Выход
        self.pushButton_4.clicked.connect(self.close)
        self.scene.addPixmap(QtGui.QPixmap("section_sketch.png"))
        self.pushButton_8.clicked.connect(self.drowRooms)

        self.graphicsView.setScene(self.scene)


    # Метод для отрисовки
    def drowRooms(self):
        if not self.lodgers.rоом_beds:
            msg = QtWidgets.QMessageBox.information(
                self,
                'Message',
                f'Просматривать рано. \n'
                f'Нажмите кнопку `Проживающие` и выполните необходимые корректировки.'
            )
            return

        self.Rooms = []
        self.Rooms.append((
            # Рисование прямоугольников для 131 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя через список)
            self.scene.addRect(195, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1311
            self.scene.addRect(240, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1312
            self.scene.addRect(195, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1313
            self.scene.addRect(240, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1314
        self.Rooms.append((
            # Рисование прямоугольников для 132 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(330, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1321
            self.scene.addRect(375, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1322
            self.scene.addRect(330, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1323
            self.scene.addRect(375, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1324
        self.Rooms.append((
            # Рисование прямоугольников для 133 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(465, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1331
            self.scene.addRect(510, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1332
            self.scene.addRect(465, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1333
            self.scene.addRect(510, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1334
        self.Rooms.append((
            # Рисование прямоугольников для 134 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(595, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1341
            self.scene.addRect(640, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1342
            self.scene.addRect(595, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1343
            self.scene.addRect(640, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1344
        self.Rooms.append((
            # Рисование прямоугольников для 135 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(595, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1351
            self.scene.addRect(640, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1352
            self.scene.addRect(595, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1353
            self.scene.addRect(640, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1354
        self.Rooms.append((
            # Рисование прямоугольников для 136 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(465, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1361
            self.scene.addRect(510, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1362
            self.scene.addRect(465, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1363
            self.scene.addRect(510, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1364
        self.Rooms.append((
            # Рисование прямоугольников для 137 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(330, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1371
            self.scene.addRect(375, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1372
            self.scene.addRect(330, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1373
            self.scene.addRect(375, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1374
        self.Rooms.append((
            # Рисование прямоугольников для 138 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
            self.scene.addRect(195, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1381
            self.scene.addRect(240, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1382
            self.scene.addRect(195, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)),  # 1383
            self.scene.addRect(240, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green))))  # 1384


        # список сформированный в новом классе
        for k, v in self.lodgers.rоом_beds:
            self.Rooms[self.rоом_rect[k]][int(v)].setBrush(QtGui.QBrush(Qt.red))


    def openlodgers(self):
        self.hide()
        self.lodgers.show()


    # Функция для возвращения на главное окно (Из окна проживающие) по кнопке Назад
    def returnMainWindow1(self):
        self.lodgers._getRooms()  # формирование списка self.lodgers.rоом_beds
        self.drowRooms()  # отрисовка

        self.lodgers.close()
        self.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())

файл getRooms.py:

from PyQt5 import QtWidgets
from PyQt5.QtSql import QSqlDatabase
from PyQt5.QtSql import QSqlTableModel
from lodgers import Ui_lodgers


# новый класс
class Lodgers(QtWidgets.QMainWindow, Ui_lodgers):
    def __init__(self, parent=None):
        super(Lodgers, self).__init__(parent)
        self.setupUi(self)

        sdb = QSqlDatabase.addDatabase('QSQLITE')
        sdb.setDatabaseName('baza.db')
        sdb.open()
        self.model = QSqlTableModel(db=sdb)
        self.model.setTable("users")
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.select()

        self.tableView_1.setModel(self.model)

        self.rоом_beds = []

    def _getRooms(self):
        self.rоом_beds = []
        for row in range(self.model.rowCount()):
            if self.model.data(self.model.index(row, 2)) == 1:
                rоом_bed = str(self.model.data(
                    self.model.index(row, 1)))[:3], \
                           str(self.model.data(self.model.index(row, 1)))[3]
                self.rоом_beds.append(rоом_bed)



Ответы (1 шт):

Автор решения: S. Nick
  1. Чтобы выполнить операцию вставки, просто вызовите метод insertRow(row), чтобы передать значение индекса, чтобы определить позицию для вставки. row=0 для вставки в первую строку.
    Метод setData() может использоваться для вставки или обновления значений. Он требует двух параметров: первый - это позиция, а второй - вставленные данные. Наконец, вызовите метод submit(), чтобы зафиксировать изменения, которые мы внесли в базу данных.

  2. Удалить строку: вызвать метод removeRow() для передачи значения индекса, т.е. вам надо выбрать строку, которую вы хотите удалить.

    self.model.removeRow(self.tableView_1.currentIndex().row())

  3. Все, я внес изменения только модуль getRooms.py

getRooms.py

from PyQt5 import QtWidgets
from PyQt5.QtSql import QSqlDatabase
from PyQt5.QtSql import QSqlTableModel
from lodgers import Ui_lodgers


# новый класс
class Lodgers(QtWidgets.QMainWindow, Ui_lodgers):
    def __init__(self, parent=None):
        super(Lodgers, self).__init__(parent)
        self.setupUi(self)

        sdb = QSqlDatabase.addDatabase('QSQLITE')
        sdb.setDatabaseName('baza_1214255.db')                        # baza.db установите свою
        sdb.open()
        self.model = QSqlTableModel(db=sdb)
        self.model.setTable("users")
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)         
        self.model.select()

        self.tableView_1.setModel(self.model)

        self.rоом_beds = []
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        self.pushButton_9.clicked.connect(self.on_add_record)           # "Добавить запись"))
        self.pushButton_10.clicked.connect(self.on_del_record)          # "Удалить запись"))        

    def on_add_record(self):
        row = self.tableView_1.selectionModel().currentIndex().row()
        if self.tableView_1.selectionModel().currentIndex().row() == -1:
            row = 0
            self.model.insertRow(row)  
        else:
            row = row + 1
            self.model.insertRow(row) 
        
        self.model.setData(self.model.index(row, 0), 'ФИО NEW')
        self.model.setData(self.model.index(row, 1), '0000')
        self.model.setData(self.model.index(row, 2), '0')
        self.model.setData(self.model.index(row, 3), '0')
        self.model.submit()    

    def on_del_record(self):
        self.model.removeRow(self.tableView_1.currentIndex().row())
        self.model.select()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  

    def _getRooms(self):
        self.rоом_beds = []
        for row in range(self.model.rowCount()):
            if self.model.data(self.model.index(row, 2)) == 1:
                rоом_bed = str(self.model.data(
                    self.model.index(row, 1)))[:3], \
                           str(self.model.data(self.model.index(row, 1)))[3]
                self.rоом_beds.append(rоом_bed)

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка