pyqt5对mysql的操作_PyQt5编程(42)—使用数据库(8)

本文介绍了如何使用PyQt5的QSqlQueryModel类与SQL查询关联,展示从MySQL数据库中获取的数据。通过设置查询、数据模型、标题和排序,将查询结果在QTableView中显示,并提供了示例代码。
摘要由CSDN通过智能技术生成

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():数据库发生的最后一条错误信息。

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")

创建数据库连接

con = QtSql.QSqlDatabase.addDatabase('QSQLITE')

con.setDatabaseName('data.sqlite')

con.open()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值