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()