import os from PyQt5.QtCore import QSize from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView, QWidget, QHBoxLayout, QVBoxLayout, QLineEdit) basedir = os.path.dirname(__file__) class MainWindow(QMainWindow): def __init__(self): super().__init__() container = QWidget() layout_search = QHBoxLayout() self.track = QLineEdit() self.track.setPlaceholderText("Track name...") self.track.textChanged.connect(self.update_query) self.composer = QLineEdit() self.composer.setPlaceholderText("Artist name...") self.composer.textChanged.connect(self.update_query) self.album = QLineEdit() self.album.setPlaceholderText("Album name...") self.album.textChanged.connect(self.update_query) layout_search.addWidget(self.track) layout_search.addWidget(self.composer) layout_search.addWidget(self.album) layout_view = QVBoxLayout() layout_view.addLayout(layout_search) self.table = QTableView() layout_view.addWidget(self.table) container.setLayout(layout_view) self.model = QSqlQueryModel() self.table.setModel(self.model) self.db = QSqlDatabase("QSQLITE") self.db.setDatabaseName(os.path.join(basedir, "Chinook_Sqlite.sqlite")) self.db.open() self.query = QSqlQuery(self.db) self.query.prepare( "select Name, composer, Album.Title from Track " "inner join Album on Track.AlbumId = Album.AlbumId where " "Track.Name like '%' || :track_name || '%' and " "Track.composer like '%' || :composer_name || '%' and " "Album.Title like '%' || :album_title || '%' ") self.update_query() self.setMinimumSize(QSize(1024, 600)) self.setCentralWidget(container) def update_query(self, s=None): track_name = self.track.text() track_composer = self.composer.text() album_title = self.album.text() self.query.bindValue(":track_name", track_name) self.query.bindValue(":composer_name", track_composer) self.query.bindValue(":album_title", album_title) self.query.exec_() self.model.setQuery(self.query) if __name__ == "__main__": import sys app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())