Добавление записей в БД и таблицу QTableView

Рейтинг: 0Ответов: 1Опубликовано: 10.02.2023

Помогите пожалуйста вывести элементы БД в QTableView, я недавно работаю PyQt5 и не могу разобраться с этим:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel
from PyQt5.Qt import *
from PyQt5.QtSql import *
import sqlite3


connection = sqlite3.connect('datapass.db')
cursor = connection.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS newpass
          (platform TEXT, 
          login TEXT, 
          password TEXT
)''')

connection.commit()
connection.close()


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(500, 400)
    MainWindow.setStyleSheet("background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(153, 153, 230, 255), stop:1 rgba(255, 191, 191, 255));")
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.pushButton_dobavit = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_dobavit.setGeometry(QtCore.QRect(120, 340, 90, 30))
    font = QtGui.QFont()
    font.setFamily("Arial")
    font.setPointSize(12)
    font.setBold(True)
    font.setWeight(75)
    self.pushButton_dobavit.setFont(font)
    self.pushButton_dobavit.setStyleSheet("QPushButton{\n"
"    color: rgb(74, 78, 145);\n"
"    border: 2px solid ; \n"
"    border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111, 
230, 255), stop:1 rgba(255, 144, 144, 255));\n"
"}\n"
"QPushButton:hover{\n"
"    \n"
"    \n"
"    background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138, 
138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
"}")
    self.pushButton_dobavit.setObjectName("pushButton_dobavit")
    self.pushButton_nazad = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_nazad.setGeometry(QtCore.QRect(20, 340, 90, 30))
    font = QtGui.QFont()
    font.setFamily("Arial")
    font.setPointSize(12)
    font.setBold(True)
    font.setWeight(75)
    self.pushButton_nazad.setFont(font)
    self.pushButton_nazad.setStyleSheet("QPushButton{\n"
"    color: rgb(74, 78, 145);\n"
"    border: 2px solid ; \n"
"    border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111, 
230, 255), stop:1 rgba(255, 144, 144, 255));\n"
"}\n"
"QPushButton:hover{\n"
"    \n"
"    \n"
"    background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138, 
138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
"}")
    self.pushButton_nazad.setObjectName("pushButton_nazad")
    self.pushButton_udalit = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_udalit.setGeometry(QtCore.QRect(220, 340, 90, 30))
    font = QtGui.QFont()
    font.setFamily("Arial")
    font.setPointSize(12)
    font.setBold(True)
    font.setWeight(75)
    self.pushButton_udalit.setFont(font)
    self.pushButton_udalit.setStyleSheet("QPushButton{\n"
"    color: rgb(74, 78, 145);\n"
"    border: 2px solid ; \n"
"    border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111, 
230, 255), stop:1 rgba(255, 144, 144, 255));\n"
"}\n"
"QPushButton:hover{\n"
"    \n"
"    \n"
"    background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138, 
138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
"}")
    self.pushButton_udalit.setObjectName("pushButton_udalit")
    self.tableView = QtWidgets.QTableView(self.centralwidget)
    #self.tableWidget = QtWidgets.QTableView(self.centralwidget)
    self.tableView.setGeometry(QtCore.QRect(50, 30, 400, 290))
    self.tableView.setObjectName("tableView")
    MainWindow.setCentralWidget(self.centralwidget)

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



def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.pushButton_dobavit.setText(_translate("MainWindow", "Добавить"))
    self.pushButton_nazad.setText(_translate("MainWindow", "Назад"))
    self.pushButton_udalit.setText(_translate("MainWindow", "Удалить"))
    self.pushButton_dobavit.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
    self.pushButton_nazad.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
    self.pushButton_udalit.setCursor(QCursor(QtCore.Qt.PointingHandCursor))





class Dialog(QDialog):
def __init__(self):
    super().__init__()
    self.setWindowTitle('Input Dialog')

    self.line_edit_platform = QLineEdit()
    self.line_edit_login = QLineEdit()
    self.line_edit_password = QLineEdit()

    form_layout = QFormLayout()
    form_layout.addRow('Platform:', self.line_edit_platform)
    form_layout.addRow('Login:', self.line_edit_login)
    form_layout.addRow('Password:', self.line_edit_password)

    button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
    button_box.accepted.connect(self.accept)
    button_box.rejected.connect(self.reject)

    main_layout = QVBoxLayout()
    main_layout.addLayout(form_layout)
    main_layout.addWidget(button_box)
    self.setLayout(main_layout)



class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
    super().__init__()
    self.setupUi(self)

    self.pushButton_nazad.clicked.connect(self.close)
    self.pushButton_dobavit.clicked.connect(self.add)

    db = QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName('datapass.db')
    db.open()
    self.model = QSqlTableModel(self)
    self.model.setTable("newpass")
    self.model.select()
    self.tableView.setModel(self.model)

def add(self):
    inputDialog = Dialog()
    rez = inputDialog.exec()
    if not rez:
        msg = QMessageBox.information(self, 'Внимание', 'Диалог сброшен.')
        return
    platform = inputDialog.line_edit_platform.text()
    login = inputDialog.line_edit_login.text()
    password = inputDialog.line_edit_password.text()
    if not platform or not login or not password:
        msg = QMessageBox.information(self, 'Внимание', 'Заполните пожалуйста все поля.')
        return

    r = self.model.record()
    r.setValue("platform", platform)
    r.setValue("login", login)
    r.setValue("password", password)
    self.model.insertRecord(-1, r)
    self.model.select()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

Ответы

▲ 0

Я не знаю чем вам помочь, я просто демонстрирую работу кода,
изменив только название БД с datapass.db на datapass_q1495046.db.

И написал комментарий:

# """ Внимание !!! Код между строк # vvv и # ^^^
# """ выполняется ОДИН раз при первом запуске
""" Вот этот код я закомментировал после первого запуска
# vvv
connection = sqlite3.connect('datapass_q1495046.db')          # datapass.db
cursor = connection.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS newpass
          (platform TEXT, 
          login TEXT, 
          password TEXT
)''')
connection.commit()
connection.close()
# ^^^
"""

main.py:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel
from PyQt5.Qt import *
from PyQt5.QtSql import *
import sqlite3


# """ Внимание !!! Код между строк # vvv и # ^^^
# """ выполняется ОДИН раз при первом запуске
""" Вот этот код я закомментировал после первого запуска
# vvv
connection = sqlite3.connect('datapass_q1495046.db')          # datapass.db
cursor = connection.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS newpass
          (platform TEXT, 
          login TEXT, 
          password TEXT
)''')
connection.commit()
connection.close()
# ^^^
"""
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(500, 400)
        MainWindow.setStyleSheet("background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(153, 153, 230, 255), stop:1 rgba(255, 191, 191, 255));")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton_dobavit = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_dobavit.setGeometry(QtCore.QRect(120, 340, 90, 30))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_dobavit.setFont(font)
        self.pushButton_dobavit.setStyleSheet("QPushButton{\n"
    "    color: rgb(74, 78, 145);\n"
    "    border: 2px solid ; \n"
    "    border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111, \
    230, 255), stop:1 rgba(255, 144, 144, 255));\n"
    "}\n"
    "QPushButton:hover{\n"
    "    \n"
    "    \n"
    "    background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138, \
    138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
    "}")
        self.pushButton_dobavit.setObjectName("pushButton_dobavit")
        self.pushButton_nazad = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_nazad.setGeometry(QtCore.QRect(20, 340, 90, 30))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_nazad.setFont(font)
        self.pushButton_nazad.setStyleSheet("QPushButton{\n"
    "    color: rgb(74, 78, 145);\n"
    "    border: 2px solid ; \n"
    "    border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111, \
    230, 255), stop:1 rgba(255, 144, 144, 255));\n"
    "}\n"
    "QPushButton:hover{\n"
    "    \n"
    "    \n"
    "    background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138, \
    138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
    "}")
        self.pushButton_nazad.setObjectName("pushButton_nazad")
        self.pushButton_udalit = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_udalit.setGeometry(QtCore.QRect(220, 340, 90, 30))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_udalit.setFont(font)
        self.pushButton_udalit.setStyleSheet("QPushButton{\n"
    "    color: rgb(74, 78, 145);\n"
    "    border: 2px solid ; \n"
    "    border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111, \
    230, 255), stop:1 rgba(255, 144, 144, 255));\n"
    "}\n"
    "QPushButton:hover{\n"
    "    \n"
    "    \n"
    "    background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138, \
    138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
    "}")
        self.pushButton_udalit.setObjectName("pushButton_udalit")
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        #self.tableWidget = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(50, 30, 400, 290))
        self.tableView.setObjectName("tableView")
        MainWindow.setCentralWidget(self.centralwidget)

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



    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton_dobavit.setText(_translate("MainWindow", "Добавить"))
        self.pushButton_nazad.setText(_translate("MainWindow", "Назад"))
        self.pushButton_udalit.setText(_translate("MainWindow", "Удалить"))
        self.pushButton_dobavit.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_nazad.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_udalit.setCursor(QCursor(QtCore.Qt.PointingHandCursor))


class Dialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Input Dialog')

        self.line_edit_platform = QLineEdit()
        self.line_edit_login = QLineEdit()
        self.line_edit_password = QLineEdit()

        form_layout = QFormLayout()
        form_layout.addRow('Platform:', self.line_edit_platform)
        form_layout.addRow('Login:', self.line_edit_login)
        form_layout.addRow('Password:', self.line_edit_password)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)

        main_layout = QVBoxLayout()
        main_layout.addLayout(form_layout)
        main_layout.addWidget(button_box)
        self.setLayout(main_layout)



class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton_nazad.clicked.connect(self.close)
        self.pushButton_dobavit.clicked.connect(self.add)

        db = QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('datapass_q1495046.db')               # datapass.db
        db.open()
        self.model = QSqlTableModel(self)
        self.model.setTable("newpass")
        self.model.select()
        self.tableView.setModel(self.model)

    def add(self):
        inputDialog = Dialog()
        rez = inputDialog.exec()
        if not rez:
            msg = QMessageBox.information(self, 'Внимание', 'Диалог сброшен.')
            return
        platform = inputDialog.line_edit_platform.text()
        login = inputDialog.line_edit_login.text()
        password = inputDialog.line_edit_password.text()
        if not platform or not login or not password:
            msg = QMessageBox.information(self, 'Внимание', 'Заполните пожалуйста все поля.')
            return

        r = self.model.record()
        r.setValue("platform", platform)
        r.setValue("login", login)
        r.setValue("password", password)
        self.model.insertRecord(-1, r)
        self.model.select()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

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

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

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

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