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中使用select模块实现非阻塞的IO
Feb 03 Python
python实现发送和获取手机短信验证码
Jan 15 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
python通过http下载文件的方法详解
Jul 26 Python
详解Python3 pandas.merge用法
Sep 05 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
Python pandas库中的isnull()详解
Dec 26 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
Python collections模块的使用方法
Oct 09 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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比较多维数组中值的大小排序实现代码
2012/09/08 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
python中的二维列表实例详解
2018/06/19 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
争论的故事教学反思
2014/02/06 职场文书
给校长的建议书
2014/03/12 职场文书
中学生操行评语
2014/04/24 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
教师党员自我评价范文
2015/03/04 职场文书
施工员岗位职责范本
2015/04/11 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
Flask response响应的具体使用
2021/07/15 Python
Python中的 enumerate和zip详情
2022/05/30 Python