PyQt中使用QtSql连接MySql数据库的方法


Posted in Python onJuly 28, 2020

PyQt 有内置的数据库连接类 QtSql 。

在使用 PyQt 连接 MySql 展示数据时,如果明确所有数据库操作都与 Qt 窗口有关,且不涉及复杂的数据操作,则可以使用内置的 QtSql 类。不需要安装额外的数据库类,且能更加便利的与 QtTableView 等 Qt 控件进行数据交互。

初始化

db = QtSql.QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('localhost')
db.setDatabaseName('dev')
db.setUserName('root')
db.setPassword('123')
db.open()

QMYSQL 代表连接 MySql 数据库,可以通过 QtSql.QSqlDatabase.drivers() 来查询当前版本 PyQt 所支持的数据库类型。

数据库连接创建后不需要长期持有 db ,连接会一直存在,直到应用程序关闭或调用 removeDatabase() 为止才会关闭。

操作数据库

一个基础的查询命令如下:

query = QSqlQuery()
isSuccess = query.exec("select count(*) from `user`;")
if not isSuccess:
  print(query.lastError().text())
if query.next():
  count = query.value(0)

创建查询对象

创建 QSqlQuery 对象。此处不需要额外参数,会使用上方初始化时连接的数据库及 database 。

执行命令

调用 exec() 方法执行查询命令。传递参数为查询语句。该方法会返回1个布尔值表示查询是否成功,失败时可以通过调用 lastError().text() 来获取失败原因。

获取查询数据

QSqlQuery 提供了 next() 、 prev() 、 first() 、 last() 和 seek() 等方法在返回的记录中进行导航,可以很容易的进行移动。但需要注意的是, exec() 刚执行结束后是定位在1个无效记录上,必须先导航到1个有效的记录上才能获取数据。

可以通过 isValid() 来判断当前是否处在一条无效的记录上。

另外 next() 、 prev() 、 first() 、 last() 和 seek() 等方法同样有布尔返回值,当导航向的记录无效时会返回 False ,可以通过返回值来辅助判断是否已经查询超出了边界值。

与 QtTableView 进行数据绑定

创建数据模型

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() 是从关联的表中获取数据,默认是获取全部数据。

关联 QtTableView

self.tableView.setModel(self.model)

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

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

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

使用 QSqlTableModel 会返回所有列,如果有列不希望展示出来,可以通过下方代码隐藏列。

self.tableView.setColumnHidden(3, True)

到此这篇关于PyQt中使用QtSql连接MySql数据库的方法的文章就介绍到这了,更多相关PyQt  QtSql连接MySql内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python两个整数相除得到浮点数值的方法
Mar 18 Python
Python中title()方法的使用简介
May 20 Python
在Django的视图中使用form对象的方法
Jul 18 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
使用python3实现操作串口详解
Jan 01 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
Python高并发解决方案实现过程详解
Jul 31 Python
python反爬虫方法的优缺点分析
Nov 25 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
pycharm全局搜索的具体步骤
Jul 28 #Python
Django model重写save方法及update踩坑详解
Jul 27 #Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 #Python
虚拟机下载python是否需要联网
Jul 27 #Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 #Python
基于python实现操作git过程代码解析
Jul 27 #Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 #Python
You might like
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
python dict.get()和dict['key']的区别详解
2016/06/30 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
python数据预处理方式 :数据降维
2020/02/24 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
本科生个人求职自荐信
2013/09/26 职场文书
酒吧创业计划书
2014/01/18 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年会计工作总结
2014/11/27 职场文书
立春观后感
2015/06/18 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs