class QSqlResult#

QSqlResult类提供了访问特定SQL数据库数据的抽象接口。 更多...

概要#

方法#

虚方法#

注释

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

详细说明#

通常情况下,您会使用 QSqlQuery 而不是 QSqlResult,因为 QSqlQueryQSqlResult 的数据库特定实现提供了一个通用的包装。

如果您正在实现自己的 SQL 驱动程序(通过 QSqlDriver 子类化),您需要提供一个自己的 QSqlResult 子类,该类实现了所有纯虚函数和其他所需的虚拟函数。

另请参阅

QSqlDriver

class BindingSyntax#

枚举类型指定在准备好的查询中指定占位符的不同语法。

常量

描述

QSqlResult.PositionalBinding

使用 ODBC 风格的位置语法,其中“?”用作占位符。

QSqlResult.NamedBinding

使用 Oracle 风格的语法,带有命名的占位符(例如,“:id”)

另请参阅

bindingSyntax()

class VirtualHookOperation#
__init__(db)#
参数:

dbQSqlDriver

使用数据库驱动程序 db 创建一个 QSqlResult。对象初始化为非活动状态。

另请参阅

isActive() driver()

addBindValue(val, type)#
参数:

将参数类型 paramType 的值 val 绑定到当前记录(行)中下一个可用的位置。

另请参阅

bindValue()

at()#
返回类型::

int

返回结果的当前(基于0的)行位置。可能返回特殊值 BeforeFirstRowAfterLastRow

另请参阅

setAt() isValid()

bindValue(placeholder, val, type)#
参数:
  • placeholder - str

  • val – 对象

  • typeParamTypeFlag 的组合

这是一个重载函数。

将参数类型为 paramTypeval 值绑定到当前记录(行)中的 placeholder 名称。

注释

绑定一个未定义的占位符将导致未定义的行为。

另请参阅

bindValue()

bindValue(pos, val, type)
参数:

将参数类型为 paramTypeval 值绑定到当前记录(行)中的位置 index

另请参阅

addBindValue()

bindValueType(placeholder)#
参数:

placeholder - str

返回类型::

组合 ParamTypeFlag

这是一个重载函数。

返回绑定到给定的 placeholder 名称的值的参数类型。

bindValueType(pos)
参数:

pos - int

返回类型::

组合 ParamTypeFlag

返回绑定在位置 index 的参数类型。

另请参阅

boundValue()

bindingSyntax()#
返回类型::

绑定语法

返回预处理查询使用的绑定语法。

boundValue(placeholder)#
参数:

placeholder - str

返回类型::

object

这是一个重载函数。

返回给定 placeholder 名称在当前记录(行)中绑定的值。

另请参阅

bindValueType()

boundValue(pos)
参数:

pos - int

返回类型::

object

返回当前记录(行)中位置 index 处绑定的值。

另请参阅

bindValue() boundValues()

返回绑定值数量
返回类型::

int

返回结果中绑定值的数量。

另请参阅

boundValues()

返回当前记录(行)中,位置在index处的绑定值名称。
参数:

pos - int

返回类型::

str

返回当前记录(行)中,位置在index处的绑定值名称。

boundValueNames()
返回类型::

字符串列表

返回所有绑定值的名称。

clear()

清除整个结果集并释放任何相关资源。

absdata(i)#
参数:

索引 – int

返回类型::

object

以QVariant形式返回当前行中索引为index的字段数据。只有当结果处于活动状态并定位在有效记录上,且index为非负数时,才会调用此函数。派生类必须重新实现此函数,并返回字段index的值,或在无法确定时返回QVariant()。

detachFromResultSet()#
driver()#
返回类型::

QSqlDriver

返回与结果关联的驱动器。这是传递给构造函数的对象。

exec()#
返回类型::

bool

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

另请参阅

prepare()

execBatch([arrayBind=false])#
参数:

arrayBind – bool

返回类型::

bool

exec_#
返回类型::

bool

executedQuery()#
返回类型::

str

返回实际执行的查询。这可能与传入的查询不同,例如在使用了绑定值并准备查询的情况下,如果基础数据库不支持准备好的查询。

另请参阅

exec() setQuery()

抽象fetch(i)#
参数:

索引 – int

返回类型::

bool

将结果定位到任意(基于0的)行 index

只有当结果处于活动状态时,才会调用此函数。派生类必须重新实现此函数,将结果定位到行 index,并且使用适当的值调用 setAt()。返回 true 表示成功,或返回 false 表示失败。

抽象fetchFirst()#
返回类型::

bool

将结果定位到结果中的第一条记录(行 0)。

只有当结果处于活动状态时,才会调用此函数。派生类必须重新实现此函数,将结果定位到第一条记录,并使用适当的值调用 setAt()。返回 true 表示成功,或返回 false 表示失败。

另请参阅

fetch() fetchLast()

抽象fetchLast()#
返回类型::

bool

将结果定位到结果中的最后一条记录(最后一行)。

只有当结果处于活动状态时,才会调用此函数。派生类必须重新实现此函数,将结果定位到最后一条记录,并使用适当的值调用 setAt()。返回 true 表示成功,或返回 false 表示失败。

另请参阅

fetch() fetchFirst()

fetchNext()#
返回类型::

bool

将结果定位到结果中下一个可用的记录(行)。

此功能仅在结果处于活动状态时调用。默认实现使用下一个索引调用 fetch()。派生类可以重写此功能并以某种方式定位结果到下一记录,并使用适当的值调用 setAt()。返回 true 表示成功,或使用 false 表示失败。

另请参阅

fetch() fetchPrevious()

fetchPrevious()#
返回类型::

bool

将结果定位到结果中的上一条记录(行)。

此功能仅在结果处于活动状态时调用。默认实现使用上一个索引调用 fetch()。派生类可以重写此功能并以某种方式定位结果到下一记录,并使用适当的值调用 setAt()。返回 true 表示成功,或使用 false 表示失败。

handle()#
返回类型::

object

警告

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

返回此结果集的低级数据库句柄,或在没有句柄的情况下返回无效的 QVariant。

警告

请务必谨慎使用,并且只有当您清楚自己在做什么时才使用此功能。

警告

如果修改结果(例如清除它),则返回的句柄可能会成为过时的指针。

警告

如果结果尚未执行,则句柄可为空。

警告

PostgreSQL:在仅向前模式中,调用 QSqlResult 的句柄可以在调用 fetch()fetchFirst()fetchLast()fetchNext()fetchPrevious() 或 nextResult() 后更改。

返回的句柄取决于数据库,在访问之前请查询变体的类型名称。

以下示例检索 sqlite 结果的句柄

db = QSqlDatabase.database("sales")
query = QSqlQuery("SELECT NAME, DOB FROM EMPLOYEES", db)
v = query.result().handle()
if v.isValid() and qstrcmp(v.typeName(), "sqlite3_stmt*") == 0:
    # v.data() returns a pointer to the handle
    sqlite3_stmt handle = sqlite3_stmt(v.data())
    if handle:
        # ...

以下代码片段返回 PostgreSQL 或 MySQL 的句柄

if qstrcmp(v.typeName(), "PGresult*") == 0:
    handle = PGresult(v.data())
    if handle:
        # ...


if qstrcmp(v.typeName(), "MYSQL_STMT*") == 0:
    MYSQL_STMT handle = MYSQL_STMT(v.data())
    if handle:
        # ...

另请参阅

句柄()

hasOutValues()#
返回类型::

bool

如果查询中至少有一个绑定值是 QSql::OutInOut,则返回 true;否则返回 false

另请参阅

bindValueType()

isActive()#
返回类型::

bool

如果结果中有要检索的记录,则返回 true;否则返回 false

isForwardOnly()#
返回类型::

bool

如果你只能向前滚动结果集,则返回 true;否则返回 false

另请参阅

setForwardOnly()

abstract isNull(i)#
参数:

索引 – int

返回类型::

bool

如果当前行在第 index 位置的字段为null,则返回 true;否则返回 false

isPositionalBindingEnabled()#
返回类型::

bool

isSelect()#
返回类型::

bool

如果当前结果来自 SELECT 语句,则返回 true;否则返回 false

另请参阅

setSelect()

isValid()#
返回类型::

bool

如果结果定位在有效记录上(即,结果不在第一条或最后一条记录之前),则返回 true;否则返回 false

另请参阅

at()

lastError()#
返回类型::

QSqlError

返回与结果相关的最后一个错误。

另请参阅

setLastError()

lastInsertId()#
返回类型::

object

如果数据库支持,则返回最近插入行的对象ID。如果没有插入任何值或数据库未能返回ID,则返回一个无效的QVariant。如果有多个行被插入,则行为未定义。

注意,对于Oracle数据库,将返回行的ROWID,而对于MySQL数据库,将返回行的自增字段。

另请参阅

hasFeature()

lastQuery()#
返回类型::

str

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

另请参阅

setQuery()

nextResult()#
返回类型::

bool

抽象 numRowsAffected()#
返回类型::

int

返回最后一个执行查询影响的行数,如果无法确定或查询是 SELECT 语句,则返回 -1。

另请参阅

size()

numericalPrecisionPolicy()#
返回类型::

数值精度策略

prepare(query)#
参数:

query – str

返回类型::

bool

准备给定的 query 以执行;查询通常使用占位符,以便可以重复执行。如果查询成功准备,则返回 true;否则返回 false

另请参阅

exec()

record()#
返回类型::

QSqlRecord

如果查询是活动的,则返回当前记录;否则返回一个空的 QSqlRecord .

默认实现始终返回一个空的 QSqlRecord .

另请参阅

isActive()

抽象 reset(sqlquery)#
参数:

sqlquery – str

返回类型::

bool

设置结果,使用 SQL 语句 query 用于后续数据检索。

派生类必须重写此函数并将查询应用于数据库。此函数仅在将结果设置为非活动状态并在新结果的第一条记录之前调用。派生类应返回 true,如果查询成功并可重复使用;否则返回 false。

另请参阅

setQuery()

resetBindCount()#

重置绑定参数的数量。

savePrepare(sqlquery)#
参数:

sqlquery – str

返回类型::

bool

使用底层数据库功能准备给定的 query。如果查询成功准备,则返回 true;否则返回 false

注意:此方法应被称作“safePrepare()”。

另请参阅

prepare()

setActive(a)#
参数:

a – bool

此函数提供派生类设置内部活动状态为 active

另请参阅

isActive()

setAt(at)#
参数:

at – int

此函数提供给派生类使用,用于设置内部(基于0的)行位置为 index

另请参阅

at()

setForwardOnly(forward)#
参数:

forward – bool

设置单向读取模式为 forward。如果 forward 为 true,则只能执行 fetchNext() 以在结果中进行导航。由于结果无需缓存,单向读取模式需要的内存远少于缓存模式。默认情况下,此功能是禁用的。

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

注释

在执行查询后调用 setForwardOnly 可能导致最佳情况下出现意外结果,最坏情况下可能会崩溃。

注释

为了确保单向读取查询成功完成,应用程序应在执行查询以及在导航查询结果后检查 lastError() 以确认没有错误。

警告

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

setLastError(e)#
参数:

eQSqlError

此函数提供给派生类使用,用于将最后一次错误设置为 error

另请参阅

lastError()

setNumericalPrecisionPolicy(policy)#
参数:

policyNumericalPrecisionPolicy

setPositionalBindingEnabled(enable)#
参数:

enable – bool

setQuery(query)#
参数:

query – str

将当前结果的查询设置为 query。您必须调用 reset() 来在数据库上执行查询。

另请参阅

reset() lastQuery()

setSelect(s)#
参数:

s – bool

此函数提供供派生类使用,以指示当前语句是否为 SQL SELECT 语句。如果语句是 SELECT 语句,则 select 参数应为 true;否则应为 false。

另请参阅

isSelect()

抽象 size()#
返回类型::

int

返回 SELECT 结果的大小,或如果无法确定或查询不是 SELECT 语句,则为 -1。

另请参阅

numRowsAffected()