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实现简单截取中文字符串的方法
Jun 15 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
Php多进程实现代码
May 07 Python
python列表list保留顺序去重的实例
Dec 14 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
浅谈Python中的继承
Jun 19 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
Dec 21 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 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自动加载的两种实现方法
2010/06/21 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
yii权限控制的方法(三种方法)
2015/12/28 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
python getpass实现密文实例详解
2019/09/24 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
数据库面试要点基本概念
2013/10/31 面试题
社区食品安全实施方案
2014/03/28 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python