3.執行SQL查詢并讀取結果
PyQt5的QSqlQuery類用來實現創建表和索引,查詢、添加、更改和刪除數據庫。
3.1 執行查詢
要查詢數據庫,必須先創建一個QSqlQuery類的實例。 QSqlQuery類的構造函數:
QSqlQuery([QString query = QString()[[,] [QSqlDatabase db = QSqlDatabase()]), query為SQL語句;db為連接的數據庫。如果db未指定,則使用默認連接。
QSqlQuery(QSqlDatabase db):和上一構造函數相比,只是沒有指定查詢語句。
QSqlQuery(QSqlQuery other):和第一個構造函數相比,沒有指定連接的數據庫。
QSqlQuery類的方法有(詳見http://doc.qt.io/qt-5/qsqlquery.html):
exec(QString query): 執行query查詢語句。查詢執行后,必須通過使用next()等函數,定位到一個有效的記錄,才能讀取數據庫記錄。
prepare(QString query): 準備SQL查詢語句。適用于帶參數的查詢語句。查詢代碼中的參數可以用ODBC樣式(問號)或Oracle樣式(符號前面加冒號)來指定,但是它們不能混合在同一個查詢中。
addBindValue(QVariant val[, QSql.ParamType paramType = QSql.In]):使用位置值綁定時,將值val添加到值列表中。 addBindValue( )調用的順序決定了此值 綁定到prepare()函數參數中的哪個占位符。可選參數paramType 默認值為QSql.In,表明是往數據庫中寫入數據;QSql.Out為從數據庫中讀出數據;QSql.InOut為往數據庫中寫入數據,但執行exec()后,會被讀出的數據覆蓋。
bindValue(int pos, const QVariant val, QSql.ParamType paramType = QSql.In):指定prepare()函數參數中的pos占位符的值為val。pos=0代表第一個占位符。
query.prepare ("insert into good values (null,?,?)")
query.bindValue (0, 'Floppy')
query.bindValue (1, 10)
query.exec()
bindValue(QString placehold, const QVariant val, QSql.ParamType paramType = QSql.In):指定prepare()函數參數中的placehold占位符的值為val。
query .prepare("insert into good values(null, :name, : count )")
query.bindValue("rname", 'Floppy')
query.bindValue(":count", 10)
query.exec()
exec():執行prepare()中的SQL語句。 如果執行成功,返回True; 否則,返回False。
execBatch(QSqlQuery.BatchExecutionMode mode = ValuesAsRows):批處理中執行先前準備好的SQL查詢。 所有綁定參數必須是列表。 如果數據庫不支持批處理執行,驅動程序將使用傳統的exec()調用來模擬它。
query.prepare("insert into good values(null, :name, :count)")
lst1 = ['Diskette', 'Printer paper', 'Printer drum']
lst2 = [10, 3, 8]
query.bindValue(':name', lst1)
query.bindValue(':count', lst2)
query.execBatch()
setForwardOnly(Bool forward):如果參數forward為True,查詢結果只能向前移動,即從頭到尾。設置為只向前移動可以節約大量的系統資源。該方法要在exec()之前調用。如:
query.prepare("select * from good order by goodname")
query.setForwardOnly(True)
query.exec_()
PyQt5編程(39)—使用數據庫(5)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 示例:from PyQt5 import QtWidgets, QtSqlimport sysapp = QtWi...
- 通過調用QSqlDatabase類的record()獲取表結構的信息。 該函數返回一個QSqlRecord類實例。...