文档不能正确解释概念,但是如果我们回顾
source code
以下内容:
bool QSqlQuery::isValid() const
{
return d->sqlResult->isValid();
}
d->sqlResult
是一个
QSqlResult
如果我们检查
isValid()
方法
QSqlResult
以下内容:
bool qsqlresult::isvalid()常量
如果结果定位在有效记录上(即,
结果未定位在第一个或最后一个之前或之后
记录);否则返回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)
,为假,有数据时为真,无数据时为假。