Как записать данные из таблицы PYQT в базу данных .db?

Мне требуется в кратчайшие сроки сделать задание, частью которого является сохранение данных из таблицы в базу данных. С базами данных я работаю первый день и у меня немного уже кипит голова, не могу разобраться...

import sys

from PyQt5.QtSql import QSqlDatabase, QSqlTableModel, QSqlQuery

import DataBaseChangingGUI as DataBaseChangingGUI  # Это наш конвертированный файл дизайна
from PyQt5 import QtWidgets, QtCore

class ExampleApp(QtWidgets.QMainWindow, DataBaseChangingGUI.Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна
        db = QSqlDatabase.addDatabase('QSQLITE')  # Добавление базы данных
        db.setDatabaseName('Rzhd.db')  # Задаем имя БД

        db.open()
        # Инициализируем модель для работы с базой данных
        self.model = QSqlTableModel(self)
        self.model.setTable(db.tables()[0])  # Определение таблицы для выведения, функция для выведения всех таблиц - db.tables

        self.tableView.setModel(self.model)
        self.model.select()
        # Выбор таблицы для вывода:
        self.select_table.addItems(db.tables())  # Добавление элементов в комбобокс
        self.select_table.currentTextChanged.connect(
            self.update_current_table)  # Реагирование на изменения в комбобоксе
        # Выбор таблицы для фильтра:
        columns = []
        for i in range(self.model.record().count()):
            columns.append(self.model.headerData(i, QtCore.Qt.Horizontal))
        self.filter_col.addItems(columns)
        # Обработка фильтров:
        self.button_apply_filter.clicked.connect(self.apply_filter)
        self.button_cancel_filter.clicked.connect(self.cancel_filter)
        # Сортировка
        self.tableView.setSortingEnabled(True)
        # Добавление строки
        self.add_row.clicked.connect(self.add_table_row)
        # Удаление строки
        self.del_row.clicked.connect(self.del_table_row)

    def update_current_table(self):
        self.model.setTable(self.select_table.currentText())  # Выбранная таблица - currentText()
        self.filter_col.clear()
        columns = []
        # Создание списка с заголовками текущей таблицы
        for i in range(self.model.record().count()):
            columns.append(self.model.headerData(i, QtCore.Qt.Horizontal))
        self.filter_col.addItems(columns)
        self.model.select()

    def apply_filter(self):
        select_filter = self.filter_arg.displayText()
        try:
            select_filter = int(self.filter_arg.displayText())
            self.model.setFilter(f"{self.filter_col.currentText()}={select_filter}")  # работает как Where
        except ValueError:
            try:
                symbol = select_filter[0]
                select_filter = int(select_filter[1:])
                if symbol == '=' or symbol == '<' or symbol == '>':
                    self.model.setFilter(f"{self.filter_col.currentText()} {symbol} {select_filter}")
                else:
                    print('Возникла ошибка')
            except ValueError:
                self.model.setFilter(f"{self.filter_col.currentText()} LIKE '{self.filter_arg.displayText()}'")

            except IndexError: # КОСТЫЛЬ НОМЕР 1 ЧТОБЫ ЕСЛИ ПОЛЬЗОВАТЕЛЬ НЕ ВВЕЛ НИЧЕГО В ФИЛЬТР ПРОГРАММА НЕ УМИРАЛА НАСМЕРТЬ
                pass


    def cancel_filter(self):
        self.model.setFilter("")

    def add_table_row(self):
        self.tableView.model().insertRow(self.tableView.model().rowCount())

    def del_table_row(self):
        self.tableView.model().removeRow(self.tableView.selectionModel().currentIndex().row())

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

Интерфейс:


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1063, 780)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.filter_arg = QtWidgets.QLineEdit(self.centralwidget)
        self.filter_arg.setFrame(True)
        self.filter_arg.setObjectName("filter_arg")
        self.gridLayout.addWidget(self.filter_arg, 1, 1, 1, 3)
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setObjectName("tableView")
        self.gridLayout.addWidget(self.tableView, 2, 0, 1, 8)
        self.filter_col = QtWidgets.QComboBox(self.centralwidget)
        self.filter_col.setObjectName("filter_col")
        self.gridLayout.addWidget(self.filter_col, 1, 5, 1, 1)
        self.button_apply_filter = QtWidgets.QPushButton(self.centralwidget)
        self.button_apply_filter.setObjectName("button_apply_filter")
        self.gridLayout.addWidget(self.button_apply_filter, 1, 6, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 1, 4, 1, 1)
        self.button_cancel_filter = QtWidgets.QPushButton(self.centralwidget)
        self.button_cancel_filter.setObjectName("button_cancel_filter")
        self.gridLayout.addWidget(self.button_cancel_filter, 1, 7, 1, 1)

        self.button_apply_changes = QtWidgets.QPushButton(self.centralwidget)
        self.button_apply_changes.setObjectName("button_apply_changes")
        self.gridLayout.addWidget(self.button_apply_changes, 3, 7, 1, 1)

        self.add_row = QtWidgets.QPushButton(self.centralwidget)
        self.add_row.setObjectName("add_row")
        self.gridLayout.addWidget(self.add_row, 3, 0, 1, 3)
        self.del_row = QtWidgets.QPushButton(self.centralwidget)
        self.del_row.setObjectName("del_row")
        self.gridLayout.addWidget(self.del_row, 3, 3, 1, 2)
        self.select_table = QtWidgets.QComboBox(self.centralwidget)
        self.select_table.setObjectName("select_table")
        self.gridLayout.addWidget(self.select_table, 0, 2, 1, 2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1063, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        self.select_table.currentTextChanged.connect(
            self.update_current_table)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.button_apply_filter.setText(_translate("MainWindow", "Применить"))
        self.label.setText(_translate("MainWindow", "Выберите таблицу"))
        self.label_2.setText(_translate("MainWindow", "Фильтр"))
        self.label_3.setText(_translate("MainWindow", "По полю"))
        self.button_apply_changes.setText(_translate("MainWindow", "Принять изменения"))
        self.button_cancel_filter.setText(_translate("MainWindow", "Отменить"))
        self.add_row.setText(_translate("MainWindow", "Добавить строку"))
        self.del_row.setText(_translate("MainWindow", "Удалить строку"))

Выглядит следующим образом: введите сюда описание изображения

Хочу либо добиться, чтобы данные сохранялись по кнопке


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