Bootstrap

PySide6(PyQT),QSqlQueryModel与QSqlQuery的关系

        在 QT中,QSqlQueryModel 和 QSqlQuery 是两个用于数据库操作的类,它们在功能和用途上有一定的区别和联系。


QSqlQuery

  QSqlQuery 是一个用于执行 SQL 语句的类。它可以用来执行各种 SQL 操作,如 SELECT、INSERT、UPDATE 和 DELETE 等。

  QSqlQuery 对象通常与一个具体的数据库连接相关联,并且可以执行单条 SQL 语句或存储过程。

以下是 QSqlQuery 的一些主要功能:

  1. 执行 SQL 语句:可以执行任意的 SQL 语句,包括查询和修改数据。
  2. 游标操作:支持向前和向后移动游标,以便处理查询结果。
  3. 绑定值:可以使用绑定值来防止 SQL 注入,并提高性能。
  4. 存储过程:可以执行存储过程。

示例代码:

from PySide6.QtSql import QSqlDatabase, QSqlQuery

db = QSqlDatabase.addDatabase('QSQLITE')   # 添加SQLite 数据库驱动
db.setDatabaseName('example.db')     # 设置数据库名称
db.open()    # 打开数据库

query = QSqlQuery(db)   # 创建一个数据库查询对象   
query.exec_('SELECT * FROM table_name')   # 执行SQL查询语句
while query.next():
    print(query.value(0))


QSqlQueryModel

  QSqlQueryModel 是一个数据模型类,它提供了与数据库查询结果的接口。它继承自 QAbstractItemModel,因此可以与各种视图类(如 QTableView)一起使用,以显示数据库中的数据。

以下是 QSqlQueryModel 的一些主要功能:

  1. 数据模型:提供了一个数据模型,可以直接与 Qt 的视图类(如 QTableView)绑定,以显示数据库数据。
  2. 自动刷新:当数据库中的数据发生变化时,模型可以自动刷新视图。
  3. 排序和过滤:支持基本的排序和过滤功能。

示例代码:

from PySide6.QtSql import QSqlDatabase, QSqlQueryModel
from PySide6.QtWidgets import QTableView, QApplication

app = QApplication([])

db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('example.db')
db.open()

model = QSqlQueryModel()
model.setQuery('SELECT * FROM table_name', db)

view = QTableView()
view.setModel(model)
view.show()

app.exec_()

关系

  QSqlQueryModel 内部使用 QSqlQuery 来执行 SQL 查询并获取数据。当为 QSqlQueryModel设置一个查询时,它会使用 QSqlQuery 来执行该查询,并将结果存储在模型中,以便视图可以显示这些数据。


        总结一下,QSqlQuery 是用于执行 SQL 语句的低级接口,而 QSqlQueryModel 是一个更高层次的抽象,它利用 QSqlQuery 来提供与数据库数据的集成,并与 Qt 的模型/视图架构无缝集成。

;