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中的__init__和__new__
Mar 12 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python文件处理
Feb 29 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
Python如何安装第三方模块
May 28 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/10/15 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
判断滚动条到底部的JS代码
2013/11/04 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
web.py在模板中输出美元符号的方法
2014/08/26 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
银行存款证明样本
2014/01/17 职场文书
农民工创业典型事迹
2014/01/25 职场文书
秸秆管理实施方案
2014/03/15 职场文书
运动会方队口号
2014/06/07 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
小学家长学校培训材料
2014/08/24 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
2014年大学生工作总结
2014/11/20 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
大学校园招聘会感想
2015/08/10 职场文书
用Python将GIF动图分解成多张静态图片
2021/06/11 Python