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继承和抽象类的实现方法
Jan 14 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python正则表达式面试题解答
Apr 28 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
如何用Python绘制3D柱形图
Sep 16 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
任意位置显示html菜单
2007/02/01 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
对Python 数组的切片操作详解
2018/07/02 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
CSMA/CD介质访问控制协议
2015/11/17 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
shell变量的作用空间是什么
2013/08/17 面试题
公司领导班子对照检查材料
2014/09/24 职场文书
法学专业求职信范文
2015/03/19 职场文书
航班延误投诉信
2015/07/02 职场文书
2015年科普工作总结
2015/07/23 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android