PySide(PyQT)进行SQLite数据库编辑和前端展示的基本操作

        以SQLite数据库为例,学习数据库的基本操作,使用QSql模块查询、编辑数据并在前端展示。


SQLite数据库的基础知识:

https://blog.csdn.net/xulibo5828/category_12785993.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12785993&sharerefer=PC&sharesource=xulibo5828&sharefrom=from_link


QSql模块的基本操作:

        QT的QSql 模块提供了对各种数据库的访问和操作功能,使得在 PySide 应用程序中与数据库进行交互变得相对简单。

基本概念

数据库连接(QSqlDatabase):

        QSqlDatabase 类表示与数据库的连接。可以创建多个数据库连接,每个连接可以有不同的配置。

事务(Transactions):

        QSqlDatabase 支持数据库事务,数据库事务将多个数据库操作组合在一起,比如对数据库进行插入、更新、删除等操作。如果这些操作全部成功,就可以提交,让这些操作永久生效;如果其中有任何一个操作失败,那么就全部回滚,即撤销所有已经执行的操作,让数据库恢复到事务开始之前的状态。这样可以保证数据库的一致性和完整性。

查询(QSqlQuery):

        QSqlQuery 类用于执行 SQL 语句和查询数据。通过数据库连接创建 QSqlQuery 对象,并执行 SELECT、INSERT、UPDATE、DELETE 等 SQL 操作。


基本使用方法

  • 导入模块
from PySide6.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel
from PySide6.QtWidgets import QApplication, QTableView
  • 创建数据库连接、注册数据库驱动
db = QSqlDatabase.addDatabase('QSQLITE')  # 使用 SQLite 数据库
db.setDatabaseName('example.db')
if not db.open():print("无法打开数据库")exit(1)
  • 执行 SQL 查询

        不使用数据模型,创建 QSqlQuery 对象并执行 SQL 语句:

query = QSqlQuery()
query.exec_("CREATE TABLE IF NOT EXISTS persons (id INTEGER PRIMARY KEY, name VARCHAR(100), age INTEGER)")
query.exec_("INSERT INTO persons (name, age) VALUES ('张三', 30)")
query.exec_("INSERT INTO persons (name, age) VALUES ('李四', 25)")
  • 使用数据模型

        创建 QSqlTableModel 并设置表:

model = QSqlTableModel()
model.setTable('persons')
model.select()
  • 绑定到视图

        创建 QTableView 并设置模型:

app = QApplication([])
view = QTableView()
view.setModel(model)
view.show()
app.exec_()

事务处理

  • 开始事务:

    db.transaction()
    
  • 提交事务:

    db.commit()
    
  • 回滚事务:

    db.rollback()
    

示例代码

        以下是一个完整的示例,展示了如何使用 PySide 的 QSql 模块创建数据库、插入数据,并将数据展示在 QTableView 中:

import sys
from PySide6.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PySide6.QtWidgets import QApplication, QTableViewdef create_connection():db = QSqlDatabase.addDatabase('QSQLITE')db.setDatabaseName('example.db')if not db.open():print("无法打开数据库")return Falsereturn Truedef create_table():query = QSqlQuery()query.exec_("CREATE TABLE IF NOT EXISTS persons (id INTEGER PRIMARY KEY, name VARCHAR(100), age INTEGER)")def insert_data():query = QSqlQuery()query.exec_("INSERT INTO persons (name, age) VALUES ('张三', 30)")query.exec_("INSERT INTO persons (name, age) VALUES ('李四', 25)")def main():if not create_connection():sys.exit(1)create_table()insert_data()app = QApplication(sys.argv)model = QSqlTableModel()model.setTable('persons')model.select()view = QTableView()view.setModel(model)view.show()sys.exit(app.exec_())if __name__ == '__main__':main()

一些容易混淆的概念:

前端显示的QTableView 和 QTableWidget :

QTableView和QTableWidget的关系与区别-CSDN博客

         QTableView:适用于需要高度灵活性、复杂数据管理或处理大数据集的场景。它要求开发者管理模型和视图的分离。

        QTableWidget:适用于简单的表格需求,提供便捷的方法来操作表格数据,但灵活性和性能可能受限。

        在实际的使用中,结合QSqlTableModel 和 QSqlQueryModel的话,QTableView的语句要更简洁一些。

数据模型的QSqlTableModel 和 QSqlQueryModel:

Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用-CSDN博客
        QSqlTableModel 和 QSqlQueryModel 是用于将数据库数据绑定到视图(如 QTableView)的模型类。QSqlTableModel 提供了编辑功能,而 QSqlQueryModel 通常用于只读数据展示。

查询类QSqlQuery和QSqlQueryModel的关系

  QSqlQuery 是一个用于执行 SQL 语句,实现各种 SQL 操作的类。QSqlQueryModel是一个数据模型类。QSqlQueryModel内部使用 QSqlQuery 来执行 SQL 查询并获取数据。当为QSqlQueryModel设置一个查询时,它会使用 QSqlQuery 来执行该查询,并将结果存储在模型中,以便视图可以显示这些数据。

PySide6(PyQT),QSqlQueryModel与QSqlQuery的关系-CSDN博客


使用QDataWidgetMapper的简单范例

        QDataWidgetMapper是 Qt 框架中的一个类。它通常用于将数据模型中的数据映射到用户界面上的小部件(widgets)。例如,可以将数据库中的一条记录映射到一组输入框、下拉列表等界面元素上,方便用户查看和编辑数据。它提供了一种方便的方式来管理数据和界面之间的交互。

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLineEdit, QPushButton, QDataWidgetMapper
from PySide6.QtSql import QSqlDatabase, QSqlTableModel
from PySide6.QtCore import Qtclass MainWindow(QMainWindow):def __init__(self):super().__init__()# 设置数据库db = QSqlDatabase.addDatabase("QSQLITE")db.setDatabaseName("users.db")if not db.open():print("无法打开数据库")return# 创建模型self.model = QSqlTableModel()self.model.setTable("users")self.model.select()# 创建映射器self.mapper = QDataWidgetMapper()self.mapper.setModel(self.model)# 创建控件self.nameEdit = QLineEdit()self.emailEdit = QLineEdit()# 设置映射self.mapper.addMapping(self.nameEdit, 1)  # 假设姓名在第1列self.mapper.addMapping(self.emailEdit, 2)  # 假设邮箱在第2列# 创建布局layout = QVBoxLayout()layout.addWidget(self.nameEdit)layout.addWidget(self.emailEdit)layout.addWidget(QPushButton("Next", clicked=self.onNext))layout.addWidget(QPushButton("Previous", clicked=self.onPrevious))# 创建中央部件centralWidget = QWidget()centralWidget.setLayout(layout)self.setCentralWidget(centralWidget)# 初始化映射器self.mapper.toFirst()def onNext(self):if self.mapper.currentIndex() < self.model.rowCount() - 1:self.mapper.toNext()def onPrevious(self):if self.mapper.currentIndex() > 0:self.mapper.toPrevious()if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9700.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP模型大对比:Transformer > RNN > n-gram

结论 Transformer 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异&#xff1a; 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的"侦探"依赖距离只能看前…

ODP(OBProxy)路由初探

OBProxy路由策略 Primary Zone 路由 官方声明默认情况&#xff0c;会将租户请求发送到租户的 primary zone 所在的机器上&#xff0c;通过 Primary Zone 路由可以尽量发往主副本&#xff0c;方便快速寻找 Leader 副本。另外&#xff0c;设置primary zone 也会在一定成都上减少…

Python NumPy(7):连接数组、分割数组、数组元素的添加与删除

1 连接数组 函数描述concatenate连接沿现有轴的数组序列stack沿着新的轴加入一系列数组。hstack水平堆叠序列中的数组&#xff08;列方向&#xff09;vstack竖直堆叠序列中的数组&#xff08;行方向&#xff09; 1.1 numpy.concatenate numpy.concatenate 函数用于沿指定轴连…

在线课堂小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

生成模型:扩散模型(DDPM, DDIM, 条件生成)

扩散模型的理论较为复杂&#xff0c;论文公式与开源代码都难以理解。现有的教程大多侧重推导公式。为此&#xff0c;本文通过精简代码&#xff08;约300行&#xff09;&#xff0c;从代码运行角度讲解扩散模型。 本文包括扩散模型的3项技术复现&#xff1a; 1.DDPM (Denoising…

DeepSeek大模型技术解析:从架构到应用的全面探索

一、引言 在人工智能领域&#xff0c;大模型的发展日新月异&#xff0c;其中DeepSeek大模型凭借其卓越的性能和广泛的应用场景&#xff0c;迅速成为业界的焦点。本文旨在深入剖析DeepSeek大模型的技术细节&#xff0c;从架构到应用进行全面探索&#xff0c;以期为读者提供一个…

[权限提升] 常见提权的环境介绍

关注这个框架的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 通过前期的渗透测试&#xff0c;我们大概率会拿到目标的一个 Shell&#xff0c;比如 WebShell 或者 MSF Shell 等等&#xff0c;不同的 Shell 对应提权的姿势也不同&#xff0c;比如有的 Shell…

SQL注入漏洞之高阶手法 宽字节注入以及编码解释 以及堆叠注入原理说明

目录 宽字节注入 编码区分 原理 函数 转译符号解释 注意 绕过方式详解 堆叠【Stack】注入攻击 注入语句 宽字节注入 在说宽字节注入之前 我们需要知道编码相关的知识点&#xff0c;这个有助于搞定什么是宽字节注入 分清楚是ascii码是什么宽字节注入代码里面加入了adds…

Spring Boot - 数据库集成05 - 集成MongoDB

Spring Boot集成MongoDB 文章目录 Spring Boot集成MongoDB一&#xff1a;使用前的准备1&#xff1a;依赖导入 & 配置2&#xff1a;实体类创建 二&#xff1a;核心 - MongoRepository三&#xff1a;核心 - MongoTemplate1&#xff1a;集合操作2&#xff1a;文档操作(重点)3&…

用 Scoop 优雅管理 Windows 软件:安装、配置与使用全指南

本篇将主要讲讲如何用「Scoop」优雅管理 Windows 软件&#xff1a;安装、配置与使用全指南 一、Scoop 是什么&#xff1f; Scoop 是一款专为 Windows 设计的命令行软件包管理工具&#xff0c;它能让你像 Linux 系统一样通过命令快速安装、更新和卸载软件。其核心优势包括&…

基于SpringBoot的假期周边游平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

JavaScript - Web APIs(下)

日期对象 目标&#xff1a;掌握日期对象&#xff0c;可以让网页显示日期 日期对象&#xff1a;用来表示时间的对象 作用&#xff1a;可以得到当前系统时间 学习路径&#xff1a; 实例化 日期对象方法 时间戳 实例化 目标&#xff1a;能够实例化日期对象 在代码中发…

复古壁纸中棕色系和米色系哪个更受欢迎?

根据最新的搜索结果&#xff0c;我们可以看到棕色系和米色系在复古壁纸设计中都非常受欢迎。以下是对这两种颜色系受欢迎程度的分析&#xff1a; 棕色系 受欢迎程度&#xff1a;棕色系在复古壁纸中非常受欢迎&#xff0c;因为它能够营造出温暖、质朴和自然的氛围。棕色系的壁纸…

Windows11无法打开Windows安全中心主界面

​# 问题描述 安全中心无法打卡主界面&#xff0c;并弹出“需要使用新应用以打开此windowsdefender连接”. 解决方法 以管理员权限打开PowerShell&#xff0c;推荐使用快捷键win x打开快捷界面&#xff0c;选择Windows终端&#xff08;管理员&#xff09;&#xff0c;并在终…

【Valgrind】安装报错: 报错有未满足的依赖关系: libc6,libc6-dbg

Valgrind 内存泄漏检测工具安装 安装 sudo apt install valgrind官方上也是如此 但是在我的系统&#xff08;debian12)上却失败了&#xff1a; 报错有未满足的依赖关系&#xff1a; libc6 : 破坏: valgrind (< 1:3.19.0-1~) 但是 1:3.16.1-1 正要被安装 libc6-dbg : 依赖…

NoSQL与SQL比较

1.认识NoSQL NoSql可以翻译做Not Only Sql&#xff08;不仅仅是SQL&#xff09;&#xff0c;或者是No Sql&#xff08;非Sql的&#xff09;数据库。是相对于传统关系型数据库而言&#xff0c;有很大差异的一种特殊的数据库&#xff0c;因此也称之为非关系型数据库。 1.1.结构…

java——继承

目录 一. 继承的基本概念 二. 继承的语法 三. 继承的核心规则 1.单继承&#xff1a; 2.子类继承父类后&#xff0c;除私有的不支持继承、构造方法不支持继承。其它的全部会继承。 ①访问权限&#xff1a; ②构造方法&#xff1a; 3.一个类没有显示继承任何类时&#xf…

大数据相关职位介绍之二(数据治理,数据库管理员, 数据资产管理师,数据质量专员)

大数据相关职位介绍之二&#xff08;数据治理&#xff0c;数据库管理员&#xff0c; 数据资产管理师&#xff0c;数据质量专员&#xff09; 文章目录 大数据相关职位介绍之二&#xff08;数据治理&#xff0c;数据库管理员&#xff0c; 数据资产管理师&#xff0c;数据质量专员…

《使用通道 Transformer 进行多尺度特征融合,引导热图像超分辨率》学习笔记

paper&#xff1a;Multi-Scale Feature Fusion using Channel Transformers for Guided Thermal Image Super Resolution 目录 摘要 1、介绍 2、相关工作 2.1 可见光图像超分辨率与恢复 2.2 热成像超分辨率 2.3 引导式热成像超分辨率 3、方法 3.1 网络架构&#xff08…

7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)

目录 0. 承前1. 深度金融研报准备2. 核心AI函数代码讲解2.1 函数概述2.2 输入参数2.3 主要流程2.4 异常处理2.5 清理工作2.7 get_ai_weights函数汇总 3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对前两篇文章&#xff0c;链接: 5. 马科维茨资产组…