Шаг 171.
Библиотека PyQt5. Работа с базами данных. Выполнение SQL-запросов... . Модели, связанные с данными. Модель, связанная с SQL-запросом

    На этом шаге мы рассмотрим cоздание и использование такой модели.

    Если требуется вывести на экран данные, извлеченные в результате выполнения SQL-запроса, и эти данные не требуется редактировать, имеет смысл использовать класс QSqlQueryModel. Он представляет модель, связанную с SQL-запросом. Иерархия наследования этого класса:

  QObject - QAbstractItemModel - QAbstractTableModel - QSqlQueryModel

    Конструктор класса:

  <Объект> = QSqlQueryModel([parent=None])

    Класс QSqlQueryModel поддерживает следующие методы (здесь приведен их сокращенный список, а полный список методов этого класса доступен на страницах https://doc.qt.io/qt-5/qsqlquerymodel.html и https://doc.qt.io/qt-5/qabstractitemmodel.html):

    Рассмотрим пример, выводящий данные из созданной нами ранее базы с помощью компонента таблицы.

from PyQt5 import QtCore, QtWidgets, QtSql
import sys
# Создаем объект приложения, иначе поддержка баз данных не будет работать
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QTableView()
window.setWindowTitle("QSqlQueryModel")
# Устанавливаем соединение с базой данных
con = QtSql.QSqlDatabase.addDatabase('QSQLITE') 
con.setDatabaseName('c:\\temp\\data.sqlite')
con.open()
# Создаем модель
sqm = QtSql.QSqlQueryModel(parent=window)
sqm.setQuery('select * from good order by goodname')
# Задаем заголовки для столбцов модели
sqm.setHeaderData(1, QtCore.Qt.Horizontal, 'Название')
sqm.setHeaderData(2, QtCore.Qt.Horizontal, 'Кол-во')
# Задаем для таблицы только что созданную модель
window.setModel(sqm)
# Скрываем первый столбец, в котором выводится идентификатор
window.hideColumn(0)
window.setColumnWidth(1, 150)
window.setColumnWidth(2, 60)
window.resize(230, 130)
window.show()
sys.exit(app.exec_())
Архив с файлом и базой данных можно взять здесь.

    Результат работы приложения изображен на рисунке 1.


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим модель, связанную с таблицей.




Предыдущий шаг Содержание Следующий шаг