创建数据模型

self.model = QtSql.QSqlTableModel(self)

self.model.setTable('user')

self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)

self.model.select()

复制代码

setTable() 是指定当前 model 关联的是哪张表。

setEditStrategy() 是设置修改模型。其参数是个枚举,共有3个值。

OnFieldChange :模型的任何将立即更新到数据库。

OnRowChange :当用户选择不同的行时,将应用对行(改动过的行)的更改。

OnManualSubmit :所有更改将在模型中缓存,直到 submitAll() 或者 revertAll() 被调用。

select() 是从关联的表中获取数据,默认是获取全部数据。

关联 UI 展示

可以将 model 与控件关联,使用数据模型去刷新 UI 展示数据。下面是 QtTableView 关联的方法,其他的控件的关联方式也是类似的。

self.tableView.setModel(self.model)

复制代码

将上文创建的 model 设置给 tableView 即可在 tableView 上展示表中数据。

显示的列名默认是数据库中表的列表,可以通过下方代码自定义列名。

self.model.setHeaderData(0, QtCore.Qt.Horizontal, 'ID')

复制代码

使用 QSqlTableModel 会返回所有列,如果有列不希望展示出来,可以通过调用方法 tableView.setColumnHidden({columnIndex}, {isHidden}) 来隐藏列。

分页

QSqlTableModel 本身没有分页功能,但它也不会一次性把所有数据都加载出来,而是在用户下拉时动态加载更多,所以初始化时对程序整体的加载数据没有什么影响。

如果换确需要添加分布功能,可以通过在 setFilter() 的筛选条件里手动添加 limit 和 offset 来实现 分页逻辑:

self.model.setFilter('1=1 limit 10 offset 0')

复制代码

需要注意的是,limit 和 offset 不能在筛选语句的最前面,如果是单纯的对整张表做分页,可以通过在前面加 1=1 来间接实现单一的分页逻辑。

排序

使用 setSort() 方法可以为展示的数据排序。使用方法为:

self.model.setSort(0, Qt.DescendingOrder)

复制代码

第1个参数是指定排序基于的列,第2个参数是决定增序还是降序。Qt.AscendingOrder 是增序,Qt.DescendingOrder 是降序。

筛选查询

直接 select() 得到的是数据库里的所有数据,但很多时候在展示数据的时候需要做一些筛选,只展示期望的数据,此时需要使用 setFilter() 方法来筛选需要的数据。该方法传的参数即为筛选字符串,字符串的格式同 sql 查询时 where 关键字后的筛选条件格式。如:

self.model.setFilter('amount>9')

self.model.select()

复制代码

组合起来等价于查询语句:

select * from user where amount>9;

复制代码

增删改

self.model.insertRow(row)

复制代码

row 是行想要添加的位置,类型是 int 。

self.model.removeRow(row)

复制代码

row 是 tableView 中想要删除的行的位置,类型是 int 。

可以直接在 QtTableView 中进行修改。也可以通过代码修改数据,修改的方式如下:

self.model.setData(self.model.index(row, 0), newId);

复制代码

需要注意的是,此处第1个参数不再是 int 型的位置,而是 QModelIndex 型的1个对象。

如果 editStrategy 是 OnManualSubmit ,增、删、改查之后需要手动调用 submitAll() 时才会把修改写入数据库。

如果要取消当前修改,可以通过 revertAll() 来实现。

自定义查询

如果期望展示的数据涉及的内容不止1张表,此时 setTable() 已经不能满足需求,应改为使用 setQuery() 来自定义查询涉及的表及返回结果。

query = QtSql.QSqlQuery("SELECT t.id, t.`name`, u.`name`, t.`create_time`, t.`update_time` FROM status t LEFT JOIN user u ON t.user_id=u.id)

self.model.setQuery(query)

self.model.query()复制代码

QSqlQuery 里的语句格式同普通的 Sql 的查询语句格式。

获取结果时也不能使用 select() ,而是需要使用 query() 。

在使用 query() 来获取数据时,setSort() 和 setFilter() 已经无效了,需要自行在 query 语句中添加相应逻辑。

qsql 关联_PyQt QSqlTableModel 的使用相关推荐

  1. qsql 关联_QTableView与QSqlTableModel显示mysql数据库中的数据,怎么在QTableView的项中添加chekbox按钮与上拉列表啊真心求指导...

    QTableView与QSqlTableModel显示mysql数据库中的数据,如何在QTableView的项中添加chekbox按钮与下拉列表啊?真心求指导. 各位大侠好,利用QTableView与 ...

  2. qsql 关联_QT之QSqlTableModel与tableview的使用

    具体描述参考博客:https://blog.csdn.net/heaven_evil/article/details/77853998 QSqlTableModel *model = new QSql ...

  3. qsql 关联_(十八)链接数据库,QSqlTableModel

    #include "mysql.h"#include"ui_mysql.h"#include#include#include#include#includeMy ...

  4. qsql 关联_QSqlRelationalTableModel使用方法 | 学步园

    声明:本文原创于yafeilinux的百度博客,http://hi.baidu.com/yafeilinux转载请注明出处. 讲完QSqlTableModel了,我们这次讲这个类的扩展类QSqlRel ...

  5. qsql 关联_第26篇 数据库(六)SQL关系表格模型QSqlRelationalTableModel

    第26篇 数据库(六)SQL关系表格模型QSqlRelationalTableModel 导语 QSqlRelationalTableModel继承自QSqlTableModel,并且对其进行了扩展, ...

  6. qsql 关联_PostgreqSQL--从认识到上手

    本文的大部分内容摘录自这本书籍. 1.配置文件 postgresql.conf: 该文件包含一些通用设置,比如内存分配,新建数据库的存储位置,postgreSQL服务器的IP地址,日志位置以及许多其他 ...

  7. qsql 关联_QSqlTableModel qt 数据库读写 使用方法(转)

    Qt QSqlTableModel 使用心得 连接数据库 执行sql查询,条件显示,排序 获取记录数,列数以及记录内容,字段内容 新增,修改,删除,恢复 其它 1---------------连接数据 ...

  8. qsql 关联_QSqlDatabase和QSqlQuery的正确方法是什么?

    当您使用addDatabase创建QSqlDatabase对象时,或者当您调用removeDatabase时,您只是将一个元组(驱动程序,主机名:端口,数据库名称,用户名/密码)关联或取消关联到名称( ...

  9. qsql 关联_SQL 中各种 join 用法

    INNER JOIN (内连接) 内连接:根据连接条件讲两张表的数据连接起来,如果没有符合的数据都会被过滤掉,留下符合条件的数据. -->INNER可以省略 SELECT FROM Table_ ...

最新文章

  1. 漫谈16S的前世今生
  2. 《learning ROS for robotics programming》
  3. 2022二区考研及调剂学校汇总
  4. BSP(BUSINESS SERVER PAGES)完整主机名设置及实现
  5. linux查看文件句柄阀值,prometheus 告警指标
  6. android studio annotations,AndroidStudio 添加AndroidAnnotations -电脑资料
  7. 一张图解决项目常见乱码问题
  8. IFIX和Historian历史数据曲线图
  9. Linux 启动流程学习
  10. Spring源码之ApplicationContext(九)初始化剩余的单例
  11. 【GCN+AE代码逐行学习】参考资料记录
  12. 推荐几款强大流行的BI系统
  13. 目标管理 - SMART原则
  14. 微机课设 | 基于STC15单片机的简易数字密码锁设计
  15. 飞机大战游戏源html代码,HTML5全民飞机大战游戏代码
  16. Android之notification通知无法点击打开APP问题解决
  17. Python求方差、均值、标准差
  18. 案例:WLC HA主WLC进入维护模式
  19. SQLSERVER2008 18456错误
  20. MATLAB 将txt文本转化为tif图片格式

热门文章

  1. ArcGIS教程:趋势分析
  2. 没有安装ppt的计算机上无法观看演示文稿,如何让没有安装PowerPoint的计算机播放演示文稿...
  3. 2022年起重机司机(限桥式起重机)考试报名及起重机司机(限桥式起重机)免费试题
  4. 谷歌基情实录:和Jeff Dean在同一台电脑上写代码
  5. 房企数据中台:核心是提高销售,客户开什么车也有用 | 地产圆桌会⑤
  6. 《可以量化的经济学》,一本挑战诺…
  7. u12无线网卡linux驱动装不上,解决Centos7 安装腾达U12无线网卡驱动问题
  8. 软件测试的工作内容?以及软件测试是干什么的?学习规划和职业规划
  9. python快速实现图像矫正_OpenCV-python 实现图片矫正
  10. 怎样写出杀手级的工程师简历