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存储网页上的图片实例
May 22 Python
python实现Flappy Bird源码
Dec 24 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
如何通过python的fabric包完成代码上传部署
Jul 29 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
python 读取、写入txt文件的示例
Sep 27 Python
python搜索算法原理及实例讲解
Nov 18 Python
python实现三次密码验证的示例
Apr 29 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
德生PL990的分析评价
2021/03/02 无线电
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python Socket编程详细介绍
2017/03/23 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
买房委托公证书
2014/04/08 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle