PyQT5: 2 базы данных
Есть код. Есть 2 базы данных. Получается открыть только первую(Database_Musik), При нажатию на кнопку про альбомы, открывается пустое окно. Как исправить помогите. Наверное я где-то, что-то одинаково назвал.
import sys
from PyQt5 import QtMultimedia, QtCore
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QLineEdit, QApplication, QMainWindow
from PyQt5.QtWidgets import QWidget, QTableView, QDialog, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
class Music(QDialog):
def __init__(self, parent):
super().__init__(parent)
self.setWindowTitle('Песни')
self.setWindowTitle('Список песен')
self.setGeometry(250, 55, 800, 400)
main_layout = QVBoxLayout()
self.model = QSqlTableModel(self)
self.model.setTable('Songs') # ('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 Albom(QDialog):
def __init__(self, parent):
super().__init__(parent)
self.setWindowTitle('Альбомы')
self.setWindowTitle('Список альбомов')
self.setGeometry(250, 55, 800, 400)
main_layout = QVBoxLayout()
self.model = QSqlTableModel(self)
self.model.setTable('Albom')
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 Guitar(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.db = QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('Database_ALbom.sqlite')
self.db.open()
self.initUI()
self.db_01 = QSqlDatabase.addDatabase('QSQLITE')
self.db_01.setDatabaseName('Database_Musik.sqlite')
self.db_01.open()
self.initUI()
def initUI(self):
self.setGeometry(250, 55, 1200, 800)
self.setWindowTitle('Гитара')
self.First_button = QPushButton('Первая струна(клавиша 1)', self)
self.First_button.resize(170, 50)
self.First_button.move(40, 100)
self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
self.Second_button.resize(170, 50)
self.Second_button.move(40, 200)
self.Accords_button = QPushButton('список альбомов', self)
self.Accords_button.resize(200, 100)
self.Accords_button.move(300, 500)
self.Accords_button.clicked.connect(self._show_albom)
self.Songs_button = QPushButton('список песен', self)
self.Songs_button.resize(200, 100)
self.Songs_button.move(300, 200)
self.Songs_button.clicked.connect(self._show_music)
def _show_music(self):
music = Music(self)
music.refresh()
music.show()
def _show_albom(self):
albom = Albom(self)
albom.refresh()
albom.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Guitar()
ex.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: Maxim Timakov
→ Ссылка
При подключении к нескольким БД соединениям нужно назначать имена.
А при использовании - указывать конкретную БД.
Я пометил места изменений # <<<
import sys
from PyQt5 import QtMultimedia, QtCore
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QLineEdit, QApplication, QMainWindow
from PyQt5.QtWidgets import QWidget, QTableView, QDialog, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
DB_ALBUMS = 'ALBUMS' # <<<
DB_SONGS = 'SONGS' # <<<
class Music(QDialog):
def __init__(self, parent):
super().__init__(parent)
self.setWindowTitle('Песни')
self.setWindowTitle('Список песен')
self.setGeometry(250, 55, 800, 400)
main_layout = QVBoxLayout()
db = QSqlDatabase.database(DB_SONGS) # <<<
self.model = QSqlTableModel(self, db) # <<<
self.model.setTable('Songs') # ('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 Albom(QDialog):
def __init__(self, parent):
super().__init__(parent)
self.setWindowTitle('Альбомы')
self.setWindowTitle('Список альбомов')
self.setGeometry(250, 55, 800, 400)
main_layout = QVBoxLayout()
db = QSqlDatabase.database(DB_ALBUMS) # <<<
self.model = QSqlTableModel(self, db) # <<<
self.model.setTable('Albom')
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 Guitar(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.db = QSqlDatabase.addDatabase('QSQLITE', DB_ALBUMS) # <<<
self.db.setDatabaseName('Database_ALbom.sqlite')
self.db.open()
self.initUI()
self.db_01 = QSqlDatabase.addDatabase('QSQLITE', DB_SONGS) # <<<
self.db_01.setDatabaseName('Database_Musik.sqlite')
self.db_01.open()
self.initUI()
def initUI(self):
self.setGeometry(250, 55, 1200, 800)
self.setWindowTitle('Гитара')
self.First_button = QPushButton('Первая струна(клавиша 1)', self)
self.First_button.resize(170, 50)
self.First_button.move(40, 100)
self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
self.Second_button.resize(170, 50)
self.Second_button.move(40, 200)
self.Accords_button = QPushButton('список альбомов', self)
self.Accords_button.resize(200, 100)
self.Accords_button.move(300, 500)
self.Accords_button.clicked.connect(self._show_albom)
self.Songs_button = QPushButton('список песен', self)
self.Songs_button.resize(200, 100)
self.Songs_button.move(300, 200)
self.Songs_button.clicked.connect(self._show_music)
def _show_music(self):
music = Music(self)
music.refresh()
music.show()
def _show_albom(self):
albom = Albom(self)
albom.refresh()
albom.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Guitar()
ex.show()
sys.exit(app.exec_())
P.S.: Не рекомендуется сохранять ссылки на БД. При необходимости получить инстанс соединения используйте QSqlDatabase.database(db_name), где db_name - имя подключения к базе.