3.2 处理查询结果
如果查询是为选取数据(SQL选择命令),涉及的方法有:
isActive():如果查询处于活动状态,则返回True。 一个活跃的QSqlQuery是exec()已成功执行,但尚未完成的状态。
isSelect():如果当前查询是SELECT语句,则返回True; 否则返回False。
PyQt5编程(39)中提到执行exec()后要定位到某一内容才能读取数据库记录。QSqlQuery类的定位函数有:
first():定位到第一条记录;
next():定位到下一条记录。如果是在exec()后立即调用,则定位到第一条记录;
previous():定位到前一条记录
last():定位到最后一条记录;
seek(int index[, bool relative = false]):定位到指定位置index,index=0代表第一条记录。如果可选参数relative为True,则index为相对当前记录的位置,index>0为向前的记录;index<0为向后的记录。
isvalid(): 如果当前是定位在有效的记录上返回True,否则返回False。
at():返回当前记录的位置,0表示第一条记录。
size():返回查询结果中的记录数。
以下方法用来处理数据记录:
value(int index):返回当前记录中字段索引为index的值。
value(QString name):返回字段名为name为值。
isNull(int index):如果字段索引为index的值为Null,返回True,否则返回False。
isNull(QString name):如果字段name的值为Null,返回True,否则返回False。
record():返回包含当前查询字段信息的QSqlRecord实例。
示例:
from PyQt5 import QtWidgets, QtSql
import sys
app = QtWidgets.QApplication(sys.argv)
con = QtSql.QSqlDatabase.addDatabase(‘QSQLITE’)
con.setDatabaseName(‘data.sqlite’)
con.open()
query = QtSql.QSqlQuery()
query.exec(“select * from good order by goodname”)
lst = []
if query.isActive():
query.first()
while query.isValid():
lst.append(query.value(‘goodname’) + ‘: ‘ + str(query.value(‘goodcount’)) + ‘pcs.’)
query.next()
for p in lst: print(p)
con.close()