Не получается открыть базу данных в PyQT5

Есть код, создал базу данных сам (скрин ниже), запускаю программу, нажимаю на кнопку список фильмов, открывается пустое окно (скрин тоже приложу).

При чём с другой базой данных, не моей, уже готовой, он её открывает. Как исправить?

import sys
from PyQt5.QtWidgets import QWidget, QTableView, QDialog, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel


class Films(QDialog):
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle('Films')

        main_layout = QVBoxLayout()

        self.model = QSqlTableModel(self)
        self.model.setTable('films')

        self.view_films = QTableView()
        self.view_films.setModel(self.model)

        main_layout.addWidget(self.view_films)

        self.setLayout(main_layout)

    def refresh(self):
        self.model.select()


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.db = QSqlDatabase.addDatabase('qsqlite')
        self.db.setDatabaseName('Database_05.sqlite')
        self.db.open()

        self.initUI()

    def initUI(self):
        main_layout = QVBoxLayout()

        self.button_films = QPushButton('список фильмов')
        self.button_films.clicked.connect(self._show_films)

        self.button_serials = QPushButton('список сериалов')

        main_layout.addWidget(self.button_films)
        main_layout.addWidget(self.button_serials)

        self.setLayout(main_layout)

    def _show_films(self):
        films = Films(self)
        films.refresh()
        films.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())



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

Автор решения: S. Nick

Приведенный пример написан правильно. Я только подставил свою БД, название которой book.db, а название таблицы - card. Я отметил для вас строки, в которые внес изменения.

import sys
from PyQt5.QtWidgets import QWidget, QTableView, QDialog, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel


class Films(QDialog):
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle('Films')
        self.setWindowTitle('Гитара')

        main_layout = QVBoxLayout()

        self.model = QSqlTableModel(self)
        self.model.setTable('card')                          # ('films')   !!!

        self.view_films = QTableView()
        self.view_films.setModel(self.model)

        main_layout.addWidget(self.view_films)

        self.setLayout(main_layout)

    def refresh(self):
        self.model.select()


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle('Гитара')                       # +
        self.setGeometry(250, 55, 1200, 800)                # +
        

        self.db = QSqlDatabase.addDatabase('QSQLITE')       # 'qsqlite'
        self.db.setDatabaseName('book.db')                  #('Database_05.sqlite')  !!!
        self.db.open()

        self.initUI()

    def initUI(self):
        main_layout = QVBoxLayout()

        self.button_films = QPushButton('список фильмов')
        self.button_films.setFixedSize(200, 100)                              # +
        self.button_films.clicked.connect(self._show_films)

        self.button_serials = QPushButton('список сериалов')
        self.button_serials.setFixedSize(200, 100)                            # +

        main_layout.addWidget(self.button_films)
        main_layout.addWidget(self.button_serials)

        self.setLayout(main_layout)

    def _show_films(self):
        films = Films(self)
        films.refresh()
        films.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())  

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

→ Ссылка