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实现二维有序数组查找的方法
Apr 27 Python
python使用pymysql实现操作mysql
Sep 13 Python
Python中几种导入模块的方式总结
Apr 27 Python
numpy自动生成数组详解
Dec 15 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
Python装饰器用法实例总结
May 26 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
python 5个实用的技巧
Sep 27 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中ini_set与ini_get用法实例
2014/11/04 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
js 函数调用模式小结
2011/12/26 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
不假外出检讨书
2014/01/27 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
嘉宾邀请函
2015/01/31 职场文书
出纳岗位职责
2015/01/31 职场文书
营业员岗位职责
2015/02/11 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
Python代码实现双链表
2022/05/25 Python