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访问纯真IP数据库脚本分享
Jun 29 Python
python安装教程 Pycharm安装详细教程
May 02 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
想学python 这5本书籍你必看!
Dec 11 Python
python3的print()函数的用法图文讲解
Jul 16 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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
用session做客户验证时的注意事项
2006/10/09 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
vue.js中created方法作用
2018/03/30 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
Python文件夹与文件的操作实现代码
2014/07/13 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Python常用库大全及简要说明
2020/01/17 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
python析构函数用法及注意事项
2021/06/22 Python