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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
Python实现3行代码解简单的一元一次方程
Aug 18 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Django之无名分组和有名分组的实现
Apr 16 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
opencv3/C++图像像素操作详解
Dec 10 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 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中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
JS重载实现方法分析
2016/12/16 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python 默认参数相关知识详解
2019/09/18 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
python实现人机猜拳小游戏
2020/02/03 Python
python实现简单飞行棋
2020/02/06 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
导师就业推荐信范文
2014/05/22 职场文书
中文专业自荐书
2014/06/29 职场文书
运动员获奖感言
2014/08/15 职场文书
超市采购员岗位职责
2015/04/07 职场文书
发票退票证明
2015/06/24 职场文书
公司岗位说明书
2015/10/08 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技