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+django实现简单的文件上传
Aug 17 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
Django forms组件的使用教程
Oct 08 Python
Python实战购物车项目的实现参考
Feb 20 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
Django项目中使用JWT的实现代码
Nov 04 Python
python文字转语音的实例代码分析
Nov 12 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
Python importlib模块重载使用方法详解
Oct 13 Python
python集合的新增元素方法整理
Dec 07 Python
Python Django ORM连表正反操作技巧
Jun 13 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程序员工具
2008/05/26 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
多版本Python共存的配置方法
2017/05/22 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
django model通过字典更新数据实例
2020/04/01 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
什么是封装
2013/03/26 面试题
应用心理学个人的求职信
2013/12/08 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
运动会广播稿200字
2015/08/19 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书