PyQt5編程(42)—使用數據庫(8)

4.與數據關聯的模型
通常情況下,數據庫中存儲的數據通過列表或表格等組件顯示。對于這些情況,PyQt提供了兩個類模型從數據庫直接提取數據。
4.1 與SQL查詢關聯的模型
如果要顯示從SQL查詢中檢索到的數據,但又不需要編輯此數據,則可使用QSqlQueryModel類。 它表示與SQL查詢關聯的模型。 這個類的繼承層次如下: 
QObject - QAbstractltemModel - QAbstractTableModel - QSqlQueryModel
QSqlQueryModel類的構造函數為:
QSqlQueryModel([parent = None])
QSqlQueryModel類支持以下方法(詳見http://doc.qt.io/qt-5/qsqlquerymodel.html和http://doc.qt.io/qt-5/qabstractitemmodel.html):

setQuery(QString query[, QSqlDatabase db = QSqlDatabase()]):重置模型并設置查詢數據。需要注意,查詢必須是活動而且沒調用isForwardOnly()。db 是可選項,沒有設置時,采用默認的連接。
query():返回與此模型關聯的QSqlQuery。
record():返回存儲查詢結果當前記錄的一個QSqlRecord實例。
record(int row):返回存儲查詢結果row條記錄的一個QSqlRecord實例。
lastError():數據庫發(fā)生的最后一條錯誤信息。
index(int row, int column[, QModelIndex parent = QModelIndex()]): 返回row行,column列和parent父索引指定的模型中項目的索引。
data(QModelIndex index[, int role = Qt.DisplayRole]):返回索引為 index和指定角色下的數據。
rowCount(QModelIndex parent = QModelIndex()):如果數據庫支持返回查詢的大小,則返回當前查詢的行數。 否則,返回當前緩存在客戶端上的行數。
sort(int column, Qt.SortOrder order = Qt.AscendingOrder):對模型按column列進行order排序。
setHeaderData(int section, Qt.Orientation orientation, QVariant value[, int role = Qt.EditRole]):設置標題數據。參數section代表行或列的索引或名稱;orientation代表行或列;
headerData(int section, Qt.Orientation orientation, int role = Qt.DisplayRole):返回標題數據。參數同上。

 下列代碼實現將查詢數據用表組件顯示的功能:

from PyQt5 import QtCore, QtWidgets, QtSql
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QTableView()
window.setWindowTitle("QSqlQueryModel")

創(chuàng)建數據庫連接

con = QtSql.QSqlDatabase.addDatabase('QSQLITE')
con.setDatabaseName('data.sqlite')
con.open()

創(chuàng)建SQL模型

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_())

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容