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获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python实现单词翻译功能
Jun 06 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
学习python的前途 python挣钱
Feb 27 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
Python generator生成器和yield表达式详解
Aug 08 Python
Python编写打字训练小程序
Sep 26 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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求两个文件的相对路径
2013/06/20 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
php中fsockopen用法实例
2015/01/05 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
市场营销专业推荐信
2013/11/03 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
售后客服工作职责
2014/06/16 职场文书
党委领导班子整改方案
2014/09/30 职场文书
工作简历的自我评价
2019/05/16 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript