美文网首页
PyQt5编程(42)—使用数据库(8)

PyQt5编程(42)—使用数据库(8)

作者: 用电热毯烤猪 | 来源:发表于2018-01-01 21:58 被阅读0次
    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_())

    相关文章

      网友评论

          本文标题:PyQt5编程(42)—使用数据库(8)

          本文链接:https://www.haomeiwen.com/subject/ubdxnxtx.html