QSqlTableModel结合使用数据库心得

本文介绍了如何结合QSqlTableModel使用数据库,重点讲解了QT的数据库组件和Model-View-Delegate框架。内容包括QSqlTableModel在用户界面显示数据、QSqlDatabase的数据库连接与查询操作,以及如何实现翻页和查询功能。
摘要由CSDN通过智能技术生成

目的

1: 了解QSqlTableMode 与 数据库集合使用
2: 了解mvc结构带来便利性
3: 数量级数据以及如何实现预览

QSqlTableModel

qt 文档如是说:

The QSqlTableModel class provides an editable data model for a single database table.
QSqlTableModel is a high-level interface for reading and writing database records from a single table. 
It is built on top of the lower-level QSqlQuery and can be used to provide data to view classes such as QTableView. 
     QSqlTableModel *model = new QSqlTableModel;
     model->setTable("employee");
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();
     model->setHeaderData(0, Qt::Horizontal, tr("Name"));
     model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

     QTableView *view = new QTableView;
     view->setModel(model);
     view->hideColumn(0); // don't show the ID
     view->show();

We set the SQL table's name and the edit strategy, then we set up the labels displayed in the view header.
 The edit strategy dictates when the changes done by the user in the view are actually applied to the database. The possible values are OnFieldChange, OnRowChange, and OnManualSubmit.
QSqlTableModel can also be used to access a database programmatically, without binding it to a view:
     QSqlTableModel model;
     model.setTable("employee");
     model.select();
     int salary = model.record(4).value("salary").toInt();
     The code snippet above extracts the salary field from record 4 in the result set of the query SELECT * from employee.
It is possible to set filters using setFilter(), or modify the sort order using setSort(). At the end, you must call select() to populate the model with data.
The tablemodel example illustrates how to use QSqlTableModel as the data source for a QTableView.
QSqlTableModel provides no direct support for foreign keys. Use the QSqlRelationalTableModel and QSqlRelationalDelegate if you want to resolve foreign keys.

采用Model-View-Delegate(模型视图代理)框架的整体结构

在这里插入图片描述
图中Model就是模型,View是视图,Delegate是代理。三者之间的关系看图已经很清楚了。其中,View用于用户界面交互,包括数据展示的总体框架等;Model用于向View提供数据支持,包括查询数据和保存数据(修改和插入);Delegate用于具体展示数据和具体提供数据编辑功能的用户交互界面。

可以通过QTableView显示对应表格数据。

QT数据库组件

QT数据库模块整体结构
在这里插入图片描述
QT数据库模块包含了用户界面层(UI Layer)、SQL接口层(SQL API Layer),和驱动程序层(Driver Layer)。

在QT应用程序中使用QT数据库模块,必须在项目文件中做如下配置。
对于CMake编译构建管理工具:
QT数据库模块CMake编译构建管理项目配置
在这里插入图片描述
对于qmake编译构建管理工具:
QT数据库模块qmake编译构建管理项目配置
在这里插入图片描述

用户界面层(UI Layer)

这里的UI可以理解成是数据库模块的普通应用开发者的API 接口;按照QT模型视图代理框架的概念体系,这个UI也可以理解成是这些类型可能会放在用户界面相关的程序代码中去用,比如在与视图有关的代码中去调用这些API。
比如QSqlQueryModel经常作为模型类型在模型视图代理框架中使用,当然也可以独立使用。

SQL接口层(SQL API Layer)

QT数据库模块使用QSqlDatabase类型提供通用的数据库的连接和SQL查询操作的API接口。

驱动程序层(Driver Layer)

QT数据库模块使用QSqlDriver类型定义了一些数据库的一些抽象的底层操作。特定数据库相关的具体实现有特定数据库对应的派生类提供。
QT 助手API DOC中描述了QT框架对特定数据库的支持情况如下图所示:
QT数据库模块驱动程序层
在这里插入图片描述

博客参考整理

基于此可以对于千万级数据显示处理效率上还是不错。

实现翻页功能

如果大量数据查询以及显示在ui上, 那必定会加载时间过长, 导致让人体验很不爽。
因此我们要考虑到分页 + 数据查询。

QSqlTableModel+QTableView的组合完成需求,同时要对应QSqlDatabase作为数据库来源对数据进行掌握。
QSqlTableModel 本身不支持分页显示逻辑数据。我们可以通过在selectStatment中进行适当修改去显示某特定页数据。

.h

#ifndef KDSQLTABLEMODEL_H
#define KDSQLTABLEMODEL_H

#include <QSqlTableModel>
#include <QObject>
#include <QtGlobal>

class KDSqlTableModelPrivate;
class KDSqlTableModel : public QSqlTableModel
{
   
    Q_OBJECT
    Q_DECLARE_PRIVATE(KDSqlTableModel)
public:
    explicit KDSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase());
    ~KDSqlTableModel();

    bool lastPage();
    bool nextPage(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 当使用Python编程时,可以通过使用PyQt中的QSqlTableModel类来修改数据库。该类提供了一种将表格数据映射到SQL数据库的方式,并且可以自动将表格更改同步到数据库中。以下是一个示例代码,可以帮助你更好地理解如何使用QSqlTableModel类修改数据库: ```python from PyQt5.QtCore import Qt from PyQt5.QtSql import QSqlDatabase, QSqlTableModel # Connect to the database db = QSqlDatabase.addDatabase('QSQLITE') db.setDatabaseName('example.db') db.open() # Create the model and set the table name model = QSqlTableModel() model.setTable('my_table') # Set the column names model.setHeaderData(0, Qt.Horizontal, 'ID') model.setHeaderData(1, Qt.Horizontal, 'Name') model.setHeaderData(2, Qt.Horizontal, 'Age') # Select the data model.select() # Modify a record record = model.record(0) record.setValue('Name', 'Alice') model.setRecord(0, record) # Submit the changes to the database model.submitAll() # Close the database connection db.close() ``` 在这个例子中,我们首先连接到数据库并创建了一个QSqlTableModel对象。然后,我们设置了模型的表格名称和列名,并使用select()方法选择了所有数据。接下来,我们修改了第一行的记录,并使用submitAll()方法将更改提交到数据库中。最后,我们关闭了数据库连接。 ### 回答2: 使用QSqlTableModel类可以很方便地在Python中修改数据库。首先,我们需要确保已经安装好PyQt5,因为QSqlTableModel是PyQt5的一部分。 在开始之前,我们需要先创建一个数据库,并在Python代码中连接到数据库。我们可以使用QSqlDatabase类来实现这个连接。连接到数据库后,我们可以创建一个QSqlTableModel对象并将其与数据库表关联起来。 接下来,我们可以使用QSqlTableModel的方法来操作数据库。例如,我们可以使用setRecord方法来修改表中的记录,可以使用submitAll方法将更改提交到数据库,可以使用rowCount和columnCount等方法来获取表中的记录数量和列数。 具体而言,以下是使用QSqlTableModel修改数据库的基本步骤: 1. 导入所需的模块: ```python from PyQt5.QtSql import QSqlDatabase, QSqlTableModel ``` 2. 连接到数据库: ```python database = QSqlDatabase.addDatabase("QMYSQL") database.setHostName("localhost") database.setDatabaseName("mydatabase") database.setUserName("root") database.setPassword("password") ok = database.open() ``` 3. 创建QSqlTableModel对象并将其与数据库表关联起来: ```python tableModel = QSqlTableModel() tableModel.setTable("mytable") tableModel.setEditStrategy(QSqlTableModel.OnFieldChange) tableModel.select() ``` 4. 修改数据库记录: ```python row = tableModel.rowCount() tableModel.setRecord(row, 0, 100) # 修改第row行第0列的值为100 ``` 5. 提交更改到数据库: ```python tableModel.submitAll() ``` 这就是使用QSqlTableModel类来修改数据库的基本步骤。当然,根据具体的需求,可能还需要进行其他操作,例如过滤数据、排序等。使用QSqlTableModel可以方便地进行这些操作,使得在Python中修改数据库变得简单而高效。 ### 回答3: Python使用QSqlTableModel修改数据库的过程如下: 首先,需要导入必要的模块和类: ```python from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication from PyQt5.QtSql import QSqlDatabase, QSqlTableModel ``` 然后,创建一个QSqlDatabase对象并连接到数据库: ```python db = QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName("database.db") # 数据库名称 if not db.open(): print("无法建立数据库连接!") return ``` 接下来,创建一个QSqlTableModel对象并设置所需的表格名称和数据库: ```python model = QSqlTableModel() model.setTable("table_name") # 表格名称 model.setEditStrategy(QSqlTableModel.OnFieldChange) # 设置编辑策略 model.select() # 查询数据库中的数据 ``` 然后,可以通过QSqlTableModel对象进行数据库的修改操作: ```python row = model.rowCount() # 获取表格中的行数 model.insertRow(row) # 插入一行数据 model.setData(model.index(row, 0), value1) # 设置指定位置的数据 model.setData(model.index(row, 1), value2) ... model.submitAll() # 提交所有的修改 ``` 最后,记得关闭数据库连接: ```python db.close() ``` 总结起来,使用Python的QSqlTableModel修改数据库的步骤为:连接数据库 -> 创建QSqlTableModel对象 -> 设置表格和编辑策略 -> 进行数据的插入/修改/删除操作 -> 提交所有的修改 -> 关闭数据库连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值