Python QSqlQuery中isValid()的说明

Python QSqlQuery中isValid()的说明,python,python-3.x,pyqt,pyqt5,qsqlquery,Python,Python 3.x,Pyqt,Pyqt5,Qsqlquery,您好,我无法理解Qt中QSqlQuery的isValid方法的解释 对于isValid(),查询始终返回False 对于next()、first()等,为true 我也检查了上次的错误,如果有,没有 我是qt新手,有人能解释一下qt是什么意思吗 bool QSqlQuery::isValid () const Returns true if the query is currently positioned on a valid record; otherwise returns false.

您好,我无法理解Qt中QSqlQuery的isValid方法的解释

对于isValid(),查询始终返回False

对于next()、first()等,为true

我也检查了上次的错误,如果有,没有

我是qt新手,有人能解释一下qt是什么意思吗

bool QSqlQuery::isValid () const

Returns true if the query is currently positioned on a valid record; otherwise returns false.
代码--


文件没有正确解释概念,但如果我们审查:

d->sqlResult
是一个
QSqlResult
,因此如果我们检查以下方法的文档:

bool QSqlResult::isValid()const

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

我们清楚地知道,在两种情况下,什么返回
QSqlQuery::isValid()
,什么将返回false,第一种情况是当尚未为结果请求数据时,第二种情况是当没有数据时

import sys
from PyQt5 import QtSql

def createConnection():
    db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(":memory:")
    if not db.open():
        return False

    query = QtSql.QSqlQuery()
    query.exec_("create table PG_Details (PG_Id int, firstname varchar(20), lastname varchar(20))")

    query.exec_("insert into PG_Details values(1, 'Danny', 'Young')")
    query.exec_("insert into PG_Details values(2, 'Christine', 'Holand')")
    query.exec_("insert into PG_Details values(1, 'Lars', 'Gordon')")
    query.exec_("insert into PG_Details values(2, 'Roberto', 'Robitaille')")
    query.exec_("insert into PG_Details values(1, 'Maria', 'Papadopoulos')")

    return True

if __name__ == '__main__':
    if not createConnection():
        sys.exit(-1)

    query = QtSql.QSqlQuery()

    if not query.exec_("select * from PG_Details where PG_Id = 1"):
        print("Error: ", query.lastError().text())

    print("isValid: ", query.isValid(), "before")

    while query.next():
        res = query.value(0)
        print("isValid: ", query.isValid())

    print("isValid: ", query.isValid(), "after")
结果:

isValid:  False before
isValid:  True
isValid:  True
isValid:  True
isValid:  False after

显然,在请求数据之前,在本例中,我们使用
query.value(0)
,它是False,有数据时为True,没有数据时再次为False。

感谢您的详细解释,有没有一种方法可以检查查询是否包含结果,而无需使用try和except块。QSqlQuery是否提供了本机函数进行检查this@VaibhavSharma我不使用try,除了。这是什么意思?我的意思是,使用isValid的原因是检查查询是否返回至少一行。我所说的try和except是指执行查询并返回try块下的结果集,如果它包含任何其他值,则可以对其进行初始化0@VaibhavSharma您可以使用size(),但如果并非所有数据库都支持此功能,例如,QSQLITE不支持它。@Edwin Christian-我想下一步是更好的检查方法,如果它返回False,那么结果集不包含任何记录,您对此有何看法
import sys
from PyQt5 import QtSql

def createConnection():
    db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(":memory:")
    if not db.open():
        return False

    query = QtSql.QSqlQuery()
    query.exec_("create table PG_Details (PG_Id int, firstname varchar(20), lastname varchar(20))")

    query.exec_("insert into PG_Details values(1, 'Danny', 'Young')")
    query.exec_("insert into PG_Details values(2, 'Christine', 'Holand')")
    query.exec_("insert into PG_Details values(1, 'Lars', 'Gordon')")
    query.exec_("insert into PG_Details values(2, 'Roberto', 'Robitaille')")
    query.exec_("insert into PG_Details values(1, 'Maria', 'Papadopoulos')")

    return True

if __name__ == '__main__':
    if not createConnection():
        sys.exit(-1)

    query = QtSql.QSqlQuery()

    if not query.exec_("select * from PG_Details where PG_Id = 1"):
        print("Error: ", query.lastError().text())

    print("isValid: ", query.isValid(), "before")

    while query.next():
        res = query.value(0)
        print("isValid: ", query.isValid())

    print("isValid: ", query.isValid(), "after")
isValid:  False before
isValid:  True
isValid:  True
isValid:  True
isValid:  False after