Не получается открыть базу данных в 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_())
