PySide6.QtSql.QSqlResult

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)
Parameters:

dbQSqlDriver

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

另请参阅

isActive() driver()

addBindValue(val, type)
Parameters:

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

另请参阅

bindValue()

at()
Return type:

整数

返回结果的当前(从零开始的)行位置。可能返回特殊值 BeforeFirstRowAfterLastRow

另请参阅

setAt() isValid()

bindValue(placeholder, val, type)
Parameters:
  • placeholder – str

  • val – 对象

  • typeParamTypeFlag 的组合

这是一个重载函数。

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

注意

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

另请参阅

bindValue()

bindValue(pos, val, type)
Parameters:

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

另请参阅

addBindValue()

bindValueType(placeholder)
Parameters:

placeholder – str

Return type:

ParamTypeFlag 的组合

这是一个重载函数。

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

bindValueType(pos)
Parameters:

pos – 整数

Return type:

ParamTypeFlag的组合

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

另请参阅

boundValue()

bindingSyntax()
Return type:

BindingSyntax

返回由预准备查询使用的绑定语法。

boundValue(placeholder)
Parameters:

placeholder – str

Return type:

对象

这是一个重载函数。

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

另请参阅

bindValueType()

boundValue(pos)
Parameters:

pos – 整数

Return type:

对象

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

另请参阅

bindValue() boundValues()

boundValueCount()
Return type:

整数

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

另请参阅

boundValues()

boundValueName(pos)
Parameters:

pos – 整数

Return type:

字符串

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

boundValueNames()
Return type:

字符串列表

返回所有绑定值的名称。

boundValues()
Return type:

.QVariant 列表

返回当前记录(行)的结果绑定值列表。

另请参阅

boundValueCount()

clear()

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

abstract data(i)
Parameters:

i – 整数

Return type:

对象

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

detachFromResultSet()
driver()
Return type:

QSqlDriver

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

exec()
Return type:

布尔

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

另请参阅

prepare()

execBatch([arrayBind=false])
Parameters:

arrayBind – 布尔值

Return type:

布尔

exec_()
Return type:

布尔

executedQuery()
Return type:

字符串

返回实际执行的查询。这可能与传递的查询不同,例如,如果绑定值与预准备查询一起使用,而底层数据库不支持预准备查询。

另请参阅

exec() setQuery()

abstract fetch(i)
Parameters:

i – 整数

Return type:

布尔

将结果定位到任意(从零开始的)行 index

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

abstract fetchFirst()
Return type:

布尔

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

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

另请参阅

fetch() fetchLast()

abstract fetchLast()
Return type:

布尔

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

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

另请参阅

fetch() fetchFirst()

fetchNext()
Return type:

布尔

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

只有在结果处于活动状态时才会调用此函数。默认实现使用下一个索引调用fetch()。派生类可以重新实现此函数,并以其他方式将结果定位到下一条记录,并使用适当的值调用setAt()。返回true表示成功,返回false表示失败。

另请参阅

fetch() fetchPrevious()

fetchPrevious()
Return type:

布尔

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

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

handle()
Return type:

对象

警告

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

返回此结果集的低级数据库句柄,该句柄包装在QVariant中,如果没有句柄,则返回无效的QVariant。

警告

请极其谨慎地使用此功能,并且仅在您知道自己在做什么的情况下使用。

警告

如果结果被修改(例如,如果你清除它),这里返回的句柄可能会变成一个过时的指针。

警告

如果结果尚未执行,句柄可以为NULL。

警告

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:
        # ...

另请参阅

handle()

hasOutValues()
Return type:

布尔

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

另请参阅

bindValueType()

isActive()
Return type:

布尔

如果结果有记录可以检索,则返回true;否则返回false

isForwardOnly()
Return type:

布尔

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

另请参阅

setForwardOnly()

abstract isNull(i)
Parameters:

i – 整数

Return type:

布尔

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

isPositionalBindingEnabled()
Return type:

布尔

isSelect()
Return type:

布尔

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

另请参阅

setSelect()

isValid()
Return type:

布尔

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

另请参阅

at()

lastError()
Return type:

QSqlError

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

另请参阅

setLastError()

lastInsertId()
Return type:

对象

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

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

另请参阅

hasFeature()

lastQuery()
Return type:

字符串

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

另请参阅

setQuery()

nextResult()
Return type:

布尔

abstract numRowsAffected()
Return type:

整数

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

另请参阅

size()

numericalPrecisionPolicy()
Return type:

NumericalPrecisionPolicy

prepare(query)
Parameters:

query – str

Return type:

布尔

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

另请参阅

exec()

record()
Return type:

QSqlRecord

如果查询处于活动状态,则返回当前记录;否则返回一个空的QSqlRecord

默认实现总是返回一个空的QSqlRecord

另请参阅

isActive()

abstract reset(sqlquery)
Parameters:

sqlquery – str

Return type:

布尔

设置结果以使用SQL语句query进行后续数据检索。

派生类必须重新实现此函数并将query应用于数据库。此函数仅在结果设置为非活动状态并定位在新结果的第一个记录之前时调用。如果查询成功并准备就绪,派生类应返回true,否则返回false。

另请参阅

setQuery()

resetBindCount()

重置绑定参数的数量。

savePrepare(sqlquery)
Parameters:

sqlquery – str

Return type:

布尔

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

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

另请参阅

prepare()

setActive(a)
Parameters:

a – 布尔值

此函数用于派生类将内部活动状态设置为active

另请参阅

isActive()

setAt(at)
Parameters:

at – int

此函数用于派生类将内部(从零开始的)行位置设置为index

另请参阅

at()

setForwardOnly(forward)
Parameters:

forward – 布尔值

设置仅向前模式为forward。如果forward为真,则仅允许使用fetchNext()来导航结果。仅向前模式需要的内存要少得多,因为结果不需要缓存。默认情况下,此功能是禁用的。

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

注意

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

注意

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

警告

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

setLastError(e)
Parameters:

eQSqlError

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

另请参阅

lastError()

setNumericalPrecisionPolicy(policy)
Parameters:

策略NumericalPrecisionPolicy

setPositionalBindingEnabled(enable)
Parameters:

enable – 布尔值

setQuery(query)
Parameters:

query – str

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

另请参阅

reset() lastQuery()

setSelect(s)
Parameters:

s – 布尔值

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

另请参阅

isSelect()

abstract size()
Return type:

整数

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

另请参阅

numRowsAffected()