PySide6.QtSql.QSqlQuery

class QSqlQuery

QSqlQuery 类提供了一种执行和操作 SQL 语句的方法。更多

概要

属性

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QSqlQuery 封装了在QSqlDatabase上执行的SQL查询中创建、导航和检索数据的功能。它可以用于执行DML(数据操作语言)语句,如SELECTINSERTUPDATEDELETE,以及DDL(数据定义语言)语句,如CREATE TABLE。它还可以用于执行非标准SQL的数据库特定命令(例如,PostgreSQL的SET DATESTYLE=ISO)。

成功执行的SQL语句将查询的状态设置为活动状态,以便isActive()返回true。否则,查询的状态设置为非活动状态。无论哪种情况,当执行新的SQL语句时,查询都位于无效记录上。在检索值之前,必须将活动查询导航到有效记录(以便isValid()返回true)。

对于某些数据库,如果在调用commit()rollback()时存在一个活动的查询,该查询是一个SELECT语句,那么提交或回滚将会失败。详情请参见isActive()

导航记录是通过以下函数执行的:

这些函数允许程序员在查询返回的记录中向前、向后或任意移动。如果您只需要向前移动结果(例如,通过使用next()),您可以使用setForwardOnly(),这将节省大量内存开销并在某些数据库上提高性能。一旦活动查询定位到有效记录,就可以使用value()检索数据。所有数据都使用QVariant从SQL后端传输。

例如:

query = QSqlQuery("SELECT country FROM artist")
while query.next():
    country = query.value(0).toString()
    doSomething(country)

要访问查询返回的数据,请使用value(int)。通过传递字段在语句中的位置(从0开始)来访问SELECT语句返回的数据中的每个字段。这使得使用SELECT *查询不可取,因为返回字段的顺序是不确定的。

为了提高效率,没有通过名称访问字段的函数(除非您使用带有名称的预准备查询,如下所述)。要将字段名称转换为索引,请使用record()。例如,使用indexOf()

query = QSqlQuery("SELECT * FROM artist")
fieldNo = query.record().indexOf("country")
while query.next():
    country = query.value(fieldNo).toString()
    doSomething(country)

QSqlQuery 支持预查询执行和将参数值绑定到占位符。某些数据库不支持这些功能,因此对于这些数据库,Qt 模拟了所需的功能。例如,Oracle 和 ODBC 驱动程序具有适当的预查询支持,Qt 利用了这一点;但对于不支持此功能的数据库,Qt 自己实现了该功能,例如在执行查询时用实际值替换占位符。使用 numRowsAffected() 来找出非 SELECT 查询影响了多少行,使用 size() 来找出 SELECT 查询检索了多少行。

Oracle 数据库通过使用冒号名称语法来标识占位符,例如 :name。ODBC 仅使用 ? 字符。Qt 支持这两种语法,但限制是您不能在同一个查询中混合使用它们。

你可以使用boundValues()来检索所有字段的值到一个变量中。

注意

并非所有的SQL操作都支持绑定值。请参考您的数据库系统的文档以检查它们的可用性。

绑定值的方法

下面我们展示了使用四种不同绑定方法的相同示例,以及一个将值绑定到存储过程的示例。

使用命名占位符的命名绑定:

query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (:id, :forename, :surname)")
query.bindValue(":id", 1001)
query.bindValue(":forename", "Bart")
query.bindValue(":surname", "Simpson")
query.exec()

使用命名占位符进行位置绑定:

query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (:id, :forename, :surname)")
query.bindValue(0, 1001)
query.bindValue(1, "Bart")
query.bindValue(2, "Simpson")
query.exec()

使用位置占位符绑定值(版本1):

query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (?, ?, ?)")
query.bindValue(0, 1001)
query.bindValue(1, "Bart")
query.bindValue(2, "Simpson")
query.exec()

使用位置占位符绑定值(版本2):

query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (?, ?, ?)")
query.addBindValue(1001)
query.addBindValue("Bart")
query.addBindValue("Simpson")
query.exec()

将值绑定到存储过程:

这段代码调用了一个名为AsciiToInt()的存储过程,通过其输入参数传递一个字符,并在输出参数中获取其结果。

query = QSqlQuery()
query.prepare("CALL AsciiToInt(?, ?)")
query.bindValue(0, "A")
query.bindValue(1, 0, QSql.Out)
query.exec()
i = query.boundValue(1).toInt() # i is 65

请注意,未绑定的参数将保留其值。

使用return语句返回值或返回多个结果集的存储过程不完全支持。具体详情请参见SQL Database Drivers

警告

在创建QSqlQuery之前,您必须加载SQL驱动程序并打开连接。此外,在查询存在期间,连接必须保持打开状态;否则,QSqlQuery的行为将是未定义的。

class BatchExecutionMode

常量

描述

QSqlQuery.ValuesAsRows

  • 更新多行。将QVariantList中的每个条目视为更新下一行的值。

QSqlQuery.ValuesAsColumns

  • 更新单行。将QVariantList中的每个条目视为数组类型的单个值。

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property forwardOnlyᅟ: bool

此属性控制仅向前模式。如果forward为真,则仅允许使用next()和带有正值的seek()来导航结果。

仅向前模式可以(取决于驱动程序)更节省内存,因为结果不需要缓存。它还可以提高某些数据库的性能。为了实现这一点,您必须在查询准备或执行之前调用setForwardOnly()。请注意,接受查询和数据库的构造函数可能会执行查询。

默认情况下,仅向前模式是关闭的。

将forward only设置为false是对数据库引擎的建议,数据库引擎最终决定结果集是仅向前还是可滚动的。isForwardOnly()将始终返回结果集的正确状态。

注意

在查询执行后调用setForwardOnly可能会导致意外结果,甚至崩溃。

注意

为了确保仅向前查询成功完成,应用程序不仅应在执行查询后检查lastError()是否有错误,还应在导航查询结果后进行检查。

警告

PostgreSQL: 在仅向前模式下导航查询结果时,不要在同一数据库连接上执行任何其他SQL命令。这将导致查询结果丢失。

另请参阅

next() seek()

Access functions:
property numericalPrecisionPolicyᅟ: QSql.NumericalPrecisionPolicy

指示数据库驱动程序返回具有由precisionPolicy指定的精度的数值。

例如,Oracle驱动程序可以将数值作为字符串检索,以防止精度损失。如果高精度不重要,可以使用此方法通过绕过字符串转换来提高执行速度。

注意:不支持以低精度获取数值的驱动程序将忽略精度策略。您可以使用hasFeature()来查找驱动程序是否支持此功能。

注意:设置精度策略不会影响当前活动的查询。调用exec(QString)prepare()以激活策略。

Access functions:
property positionalBindingEnabledᅟ: bool

此属性根据enable(默认为true)启用或禁用此查询的位置binding。如果查询本身包含一个不应作为位置绑定参数处理但例如作为PostgreSQL数据库的JSON操作符的‘?’,则禁用位置绑定非常有用。

当数据库原生支持使用问号的位置绑定时,此属性将无效(另请参阅PositionalPlaceholders)。

Access functions:
__init__(r)
Parameters:

rQSqlResult

构造一个QSqlQuery对象,该对象使用QSqlResult result与数据库进行通信。

__init__(db)
Parameters:

数据库QSqlDatabase

使用数据库 db 构造一个 QSqlQuery 对象。如果 db 无效,将使用应用程序的默认数据库。

另请参阅

QSqlDatabase

__init__(other)
Parameters:

其他QSqlQuery

注意

此函数已弃用。

构造other的副本。

QSqlQuery 不能被有意义地复制。根据你的数据库驱动程序(例如,更改副本会影响原始对象),预编译语句、绑定值等将无法正常工作。请将 QSqlQuery 视为仅可移动的类型。

__init__([query=""[, db=QSqlDatabase()]])
Parameters:

使用SQL query和数据库db构造一个QSqlQuery对象。如果未指定db,或者无效,则使用应用程序的默认数据库。如果query不是空字符串,它将被执行。

另请参阅

QSqlDatabase

addBindValue(val[, type=QSql.In])
Parameters:

在使用位置值绑定时,将值val添加到值列表中。addBindValue()调用的顺序决定了在准备好的查询中,值将绑定到哪个占位符。如果paramTypeOutInOut,则在exec()调用后,占位符将被数据库中的数据覆盖。

要绑定一个NULL值,请使用一个空的QVariant;例如,如果你正在绑定一个字符串,请使用QVariant(QMetaType::fromType())

at()
Return type:

整数

返回查询的当前内部位置。第一条记录的位置为零。如果位置无效,函数将返回BeforeFirstRowAfterLastRow,这些是特殊的负值。

bindValue(placeholder, val[, type=QSql.In])
Parameters:
  • placeholder – str

  • val – 对象

  • typeParamTypeFlag 的组合

将占位符 placeholder 绑定到预编译语句中的值 val。请注意,在指定占位符名称时,必须包含占位符标记(例如 :)。如果 paramTypeOutInOut,则在 exec() 调用后,占位符将被数据库中的数据覆盖。在这种情况下,必须预先分配足够的空间以存储结果。

要绑定一个NULL值,请使用一个空的QVariant;例如,如果你正在绑定一个字符串,请使用QVariant(QMetaType::fromType<QString>())

bindValue(pos, val[, type=QSql.In])
Parameters:

将位置pos的占位符绑定到预编译语句中的值val。字段编号从0开始。如果paramTypeOutInOut,则在exec()调用后,占位符将被数据库中的数据覆盖。

boundValue(placeholder)
Parameters:

placeholder – str

Return type:

对象

返回placeholder的值。

boundValue(pos)
Parameters:

pos – 整数

Return type:

对象

返回位置 pos 的占位符的值。

另请参阅

boundValues()

boundValueName(pos)
Parameters:

pos – 整数

Return type:

字符串

返回位置 pos 处的绑定值名称。

列表的顺序是绑定顺序,无论使用的是命名绑定还是位置绑定。

另请参阅

boundValueNames()

boundValueNames()
Return type:

字符串列表

返回所有绑定值的名称。

列表的顺序是绑定顺序,无论使用的是命名绑定还是位置绑定。

boundValues()
Return type:

.QVariant 列表

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回绑定值的列表。

列表的顺序是绑定顺序,无论使用的是命名绑定还是位置绑定。

可以通过以下方式检查绑定的值:

list = query.boundValues()
for i in range(0, list.size()):
    print(i, ":", list.at(i).toString())
clear()

清除结果集并释放查询持有的任何资源。将查询状态设置为非活动状态。您很少需要调用此函数。

driver()
Return type:

QSqlDriver

返回与查询关联的数据库驱动程序。

exec()
Return type:

布尔

执行先前准备好的SQL查询。如果查询成功执行,则返回true;否则返回false

请注意,当调用exec()时,此查询的最后一个错误将被重置。

exec(query)
Parameters:

query – str

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

执行query中的SQL。如果查询成功,返回true并将查询状态设置为active;否则返回falsequery字符串必须使用适合被查询的SQL数据库的语法(例如,标准SQL)。

查询执行后,查询定位在一个无效记录上,必须导航到一个有效记录才能检索数据值(例如,使用next())。

请注意,当调用exec()时,此查询的最后一个错误将被重置。

对于SQLite,查询字符串一次只能包含一个语句。如果提供了多个语句,函数将返回false

示例:

query = QSqlQuery()
query.exec("INSERT INTO employee (id, name, salary) "
           "VALUES (1001, 'Thad Beaumont', 65000)")
execBatch([mode=QSqlQuery.BatchExecutionMode.ValuesAsRows])
Parameters:

modeBatchExecutionMode

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

批量执行先前准备好的SQL查询。所有绑定的参数必须是变体列表。如果数据库不支持批量执行,驱动程序将使用常规的exec()调用来模拟它。

如果查询成功执行,则返回true;否则返回false

示例:

q = QSqlQuery()
q.prepare("insert into myTable values (?, ?)")
ints = QVariantList()
ints << 1 << 2 << 3 << 4
q.addBindValue(ints)
names = QVariantList()
names << "Harald" << "Boris" << "Trond" << QVariant(QMetaType.fromType<QString>())
q.addBindValue(names)
if not q.execBatch():
    print(q.lastError())

上面的例子向myTable中插入了四行新数据:

1 Harald
2 Boris
3 Trond
4 NULL

要绑定NULL值,必须将相关类型的空QVariant添加到绑定的QVariantList中;例如,如果您使用的是字符串,则应使用QVariant(QMetaType::fromType())

注意

每个绑定的QVariantList必须包含相同数量的变体。

注意

列表中的QVariant类型不能改变。例如,你不能在QVariantList中混合整数和字符串变体。

mode 参数指示绑定的 QVariantList 将如何被解释。如果 modeValuesAsRows,QVariantList 中的每个变体将被解释为新行的值。ValuesAsColumns 是 Oracle 驱动程序的一个特殊情况。在这种模式下,QVariantList 中的每个条目将被解释为存储过程中 IN 或 OUT 值的数组值。请注意,这仅在 IN 或 OUT 值是由仅包含一个基本类型列的表类型组成时才有效,例如 TYPE myType IS TABLE OF VARCHAR(64) INDEX BY BINARY_INTEGER;

exec_()
Return type:

布尔

exec_(arg__1)
Parameters:

arg__1 – str

Return type:

布尔

executedQuery()
Return type:

字符串

返回最后成功执行的查询。

在大多数情况下,此函数返回与lastQuery()相同的字符串。如果在不支持占位符的DBMS上执行带有占位符的预准备查询,则会模拟此查询的准备过程。原始查询中的占位符将被其绑定值替换以形成新的查询。此函数返回修改后的查询。它主要用于调试目的。

另请参阅

lastQuery()

finish()

指示数据库驱动程序,在重新执行此查询之前,不会从该查询中获取更多数据。通常不需要调用此函数,但如果您打算稍后重新使用查询,则可能有助于释放诸如锁或游标之类的资源。

将查询设置为非活动状态。绑定的值保留其值。

另请参阅

prepare() exec() isActive()

first()
Return type:

布尔

检索结果中的第一条记录(如果存在),并将查询定位在检索到的记录上。请注意,在调用此函数之前,结果必须处于active状态,并且isSelect()必须返回true,否则它将不执行任何操作并返回false。如果成功,返回true。如果不成功,查询位置将设置为无效位置并返回false。

isActive()
Return type:

布尔

如果查询是活动的,则返回true。一个活动的QSqlQuery是指已经成功exec()'d但尚未完成的查询。当你完成一个活动查询时,你可以通过调用finish()clear()使查询变为非活动状态,或者你可以删除QSqlQuery实例。

注意

特别值得关注的是一个活跃的查询,它是一个SELECT语句。对于一些支持事务的数据库,一个活跃的SELECT语句查询可能会导致commit()rollback()失败,因此在提交或回滚之前,你应该使用上面列出的方法之一使你的活跃SELECT语句查询变为不活跃。

另请参阅

isSelect()

isForwardOnly()
Return type:

布尔

返回 forwardOnly

另请参阅

forwardOnly next() seek()

属性 forwardOnlyᅟ 的获取器。

isNull(name)
Parameters:

name – str

Return type:

布尔

这是一个重载函数。

如果没有这个name的字段,则返回true;否则返回对应字段索引的isNull (int index)。

这个重载的效率低于 isNull()

注意

在Qt 6.8之前的版本中,此函数接受的是QString,而不是QAnyStringView。

isNull(field)
Parameters:

字段 – 整数

Return type:

布尔

如果查询不是active,查询未定位在有效记录上,没有这样的field,或者field为空,则返回true;否则返回false。请注意,对于某些驱动程序,isNull()在尝试检索数据之前不会返回准确的信息。

isPositionalBindingEnabled()
Return type:

布尔

返回 positionalBindingEnabled

另请参阅

positionalBindingEnabled

属性 positionalBindingEnabledᅟ 的获取器。

isSelect()
Return type:

布尔

如果当前查询是SELECT语句,则返回true;否则返回false

isValid()
Return type:

布尔

如果查询当前位于有效记录上,则返回true;否则返回false

last()
Return type:

布尔

检索结果中的最后一条记录(如果存在),并将查询定位在检索到的记录上。请注意,在调用此函数之前,结果必须处于active状态,并且isSelect()必须返回true,否则它将不执行任何操作并返回false。如果成功,则返回true。如果不成功,查询位置将设置为无效位置并返回false。

lastError()
Return type:

QSqlError

返回有关此查询发生的最后一个错误(如果有)的错误信息。

另请参阅

QSqlError lastError()

lastInsertId()
Return type:

对象

如果数据库支持,返回最近插入行的对象ID。如果查询未插入任何值或数据库未返回ID,则将返回无效的QVariant。如果插入操作涉及多行,则行为未定义。

对于MySQL数据库,将返回行的自动递增字段。

注意

为了使此函数在PSQL中工作,表必须包含OID,这些OID可能默认未创建。请检查default_with_oids配置变量以确保。

另请参阅

hasFeature()

lastQuery()
Return type:

字符串

返回当前正在使用的查询文本,如果没有当前查询文本,则返回空字符串。

另请参阅

executedQuery()

next()
Return type:

布尔

检索结果中的下一条记录(如果可用),并将查询定位在检索到的记录上。请注意,在调用此函数之前,结果必须处于active状态,并且isSelect()必须返回true,否则它将不执行任何操作并返回false。

以下规则适用:

  • 如果结果当前位于第一条记录之前,例如在查询执行后立即尝试检索第一条记录。

  • 如果结果当前位于最后一条记录之后,则没有变化并返回 false。

  • 如果结果位于中间某个位置,将尝试检索下一条记录。

如果无法检索到记录,结果将定位在最后一条记录之后并返回false。如果成功检索到记录,则返回true。

nextResult()
Return type:

布尔

丢弃当前结果集并导航到下一个(如果可用)。

一些数据库能够为存储过程或SQL批处理(包含多个语句的查询字符串)返回多个结果集。如果在执行查询后有多个结果集可用,此函数可用于导航到下一个结果集。

如果有新的结果集可用,此函数将返回 true。查询将重新定位到新结果集中的无效记录上,并且必须导航到有效记录后才能检索数据值。如果没有新的结果集可用,函数将返回 false,并且查询将设置为不活动状态。无论如何,旧的结果集将被丢弃。

当其中一个语句是非选择语句时,可能会返回受影响的行数而不是结果集。

请注意,某些数据库(例如Microsoft SQL Server)在处理多个结果集时需要不可滚动的游标。某些数据库可能会立即执行所有语句,而其他数据库可能会延迟执行,直到实际访问结果集为止,并且某些数据库可能对SQL批处理中允许使用的语句有限制。

numRowsAffected()
Return type:

整数

返回受结果SQL语句影响的行数,如果无法确定则返回-1。请注意,对于SELECT语句,该值未定义;请改用size()。如果查询未active,则返回-1。

另请参阅

size() hasFeature()

numericalPrecisionPolicy()
Return type:

NumericalPrecisionPolicy

返回数值精度策略。

属性 numericalPrecisionPolicyᅟ 的获取器。

prepare(query)
Parameters:

query – str

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

准备执行SQL查询query。如果查询准备成功,则返回true;否则返回false

查询可能包含用于绑定值的占位符。支持Oracle风格的冒号名称(例如,:surname)和ODBC风格(?)的占位符;但它们不能在同一查询中混合使用。有关示例,请参见Detailed Description

可移植性说明:一些数据库选择延迟准备查询,直到第一次执行。在这种情况下,准备一个语法错误的查询会成功,但每次连续的exec()都会失败。当数据库不直接支持命名占位符时,占位符只能包含[a-zA-Z0-9_]范围内的字符。

对于SQLite,查询字符串一次只能包含一个语句。如果提供了多个语句,函数将返回false

示例:

query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (:id, :forename, :surname)")
query.bindValue(":id", 1001)
query.bindValue(":forename", "Bart")
query.bindValue(":surname", "Simpson")
query.exec()
previous()
Return type:

布尔

检索结果中的前一条记录(如果存在),并将查询定位在检索到的记录上。请注意,结果必须处于active状态,并且在调用此函数之前isSelect()必须返回true,否则它将不执行任何操作并返回false。

以下规则适用:

  • 如果结果当前位于第一条记录之前,则不会有任何变化,并返回 false。

  • 如果结果当前位于最后一条记录之后,将尝试检索最后一条记录。

  • 如果结果位于中间位置,将尝试检索前一条记录。

如果无法检索到记录,结果将定位在第一条记录之前并返回false。如果成功检索到记录,则返回true。

record()
Return type:

QSqlRecord

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回一个包含当前查询字段信息的QSqlRecord。如果查询指向一个有效的行(isValid()返回true),则记录将填充该行的值。当没有活动查询时(isActive()返回false),返回一个空记录。

要从查询中检索值,应使用value(),因为其基于索引的查找速度更快。

在以下示例中,执行了一个SELECT * FROM查询。由于列的顺序未定义,使用indexOf()来获取列的索引。

q = QSqlQuery("select * from employees")
rec = q.record()
print("Number of columns: ", rec.count())
nameCol = rec.indexOf("name") # index of the field "name"
while q.next():
    print(q.value(nameCol).toString()) # output all names

另请参阅

value()

result()
Return type:

QSqlResult

返回与查询相关的结果。

seek(i[, relative=false])
Parameters:
  • i – 整数

  • relative – 布尔值

Return type:

布尔

检索位于位置index的记录(如果可用),并将查询定位在检索到的记录上。第一条记录位于位置0。请注意,在调用此函数之前,查询必须处于active状态,并且isSelect()必须返回true。

如果 relative 为 false(默认值),则适用以下规则:

  • 如果 index 为负数,结果将定位在第一条记录之前,并返回 false。

  • 否则,尝试移动到位置index的记录。如果无法检索到位置index的记录,结果将定位在最后一条记录之后,并返回false。如果成功检索到记录,则返回true。

如果 relative 为 true,则适用以下规则:

  • 如果结果当前位于第一条记录之前,并且:

    • index 为负数或零,则没有变化,并返回 false。

    • index 为正数,则尝试将结果定位到绝对位置 index - 1,遵循上述非相对查找的相同规则。

  • 如果结果当前定位在最后一条记录之后并且:

    • index 为正数或零,则没有变化,并返回 false。

    • index 为负数,则尝试将结果定位在从最后一条记录开始的 index + 1 相对位置,遵循以下规则。

  • 如果结果当前位于中间的某个位置,并且相对偏移量 index 将结果移动到零以下,则结果将定位在第一条记录之前并返回 false。

  • 否则,尝试移动到当前记录前面的index条记录(如果index为负数,则移动到当前记录后面的index条记录)。如果无法检索到偏移量为index的记录,则结果将定位在最后一条记录之后(如果index >= 0),或第一条记录之前(如果index为负数),并返回false。如果成功检索到记录,则返回true。

setForwardOnly(forward)
Parameters:

forward – 布尔值

forwardOnly 设置为 forward

另请参阅

isForwardOnly() forwardOnly next() seek()

属性 forwardOnlyᅟ 的设置器。

setNumericalPrecisionPolicy(precisionPolicy)
Parameters:

precisionPolicyNumericalPrecisionPolicy

numericalPrecisionPolicy设置为precisionPolicy

属性 numericalPrecisionPolicyᅟ 的设置器。

setPositionalBindingEnabled(enable)
Parameters:

enable – 布尔值

positionalBindingEnabled设置为enable

另请参阅

isPositionalBindingEnabled() positionalBindingEnabled

属性 positionalBindingEnabledᅟ 的设置器。

size()
Return type:

整数

返回结果的大小(返回的行数),如果无法确定大小或数据库不支持报告查询大小信息,则返回-1。请注意,对于非SELECT语句(isSelect()返回false),size()将返回-1。如果查询未激活(isActive()返回false),则返回-1。

要确定受非SELECT语句影响的行数,请使用numRowsAffected()

swap(other)
Parameters:

其他QSqlQuery

other 交换到此对象。此操作非常快速且永远不会失败。

value(name)
Parameters:

name – str

Return type:

对象

这是一个重载函数。

返回当前记录中名为name的字段的值。如果字段name不存在,则返回无效的变体。

此重载的效率低于 value()

注意

在Qt 6.8之前的版本中,此函数接受的是QString,而不是QAnyStringView。

value(i)
Parameters:

i – 整数

Return type:

对象

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回当前记录中字段index的值。

字段从左到右编号,使用SELECT语句的文本,例如在

forename, = SELECT()

字段0是forename,字段1是surname。不建议使用SELECT *,因为查询中字段的顺序是未定义的。

如果字段index不存在,查询未激活,或者查询位于无效记录上,则返回无效的QVariant。