3.2 處理查詢結(jié)果
如果查詢是為選取數(shù)據(jù)(SQL選擇命令),涉及的方法有:
isActive():如果查詢處于活動(dòng)狀態(tài),則返回True。 一個(gè)活躍的QSqlQuery是exec()已成功執(zhí)行,但尚未完成的狀態(tài)。
isSelect():如果當(dāng)前查詢是SELECT語句,則返回True; 否則返回False。
PyQt5編程(39)中提到執(zhí)行exec()后要定位到某一內(nèi)容才能讀取數(shù)據(jù)庫記錄。QSqlQuery類的定位函數(shù)有:
first():定位到第一條記錄;
next():定位到下一條記錄。如果是在exec()后立即調(diào)用,則定位到第一條記錄;
previous():定位到前一條記錄
last():定位到最后一條記錄;
seek(int index[, bool relative = false]):定位到指定位置index,index=0代表第一條記錄。如果可選參數(shù)relative為True,則index為相對當(dāng)前記錄的位置,index>0為向前的記錄;index<0為向后的記錄。
isvalid(): 如果當(dāng)前是定位在有效的記錄上返回True,否則返回False。
at():返回當(dāng)前記錄的位置,0表示第一條記錄。
size():返回查詢結(jié)果中的記錄數(shù)。
以下方法用來處理數(shù)據(jù)記錄:
value(int index):返回當(dāng)前記錄中字段索引為index的值。
value(QString name):返回字段名為name為值。
isNull(int index):如果字段索引為index的值為Null,返回True,否則返回False。
isNull(QString name):如果字段name的值為Null,返回True,否則返回False。
record():返回包含當(dāng)前查詢字段信息的QSqlRecord實(shí)例。
示例:
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()