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实现的批量下载RFC文档
Mar 10 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python机器学习之贝叶斯分类
Mar 26 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
python实现ROA算子边缘检测算法
Apr 05 Python
Django项目如何正确配置日志(logging)
Apr 29 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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
PHP HTML代码串 截取实现代码
2009/06/29 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Python 音频生成器的实现示例
2019/12/24 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
巡警年度自我鉴定
2014/02/21 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
社区平安建设方案
2014/05/25 职场文书
关于运动会的广播稿
2014/09/22 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS