1. 程式人生 > 資料庫 >PyQt中使用QtSql連線MySql資料庫的方法

PyQt中使用QtSql連線MySql資料庫的方法

PyQt 有內建的資料庫連線類 QtSql 。

在使用 PyQt 連線 MySql 展示資料時,如果明確所有資料庫操作都與 Qt 視窗有關,且不涉及複雜的資料操作,則可以使用內建的 QtSql 類。不需要安裝額外的資料庫類,且能更加便利的與 QtTableView 等 Qt 控制元件進行資料互動。

初始化

db = QtSql.QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('localhost')
db.setDatabaseName('dev')
db.setUserName('root')
db.setPassword('123')
db.open()

QMYSQL 代表連線 MySql 資料庫,可以通過 QtSql.QSqlDatabase.drivers() 來查詢當前版本 PyQt 所支援的資料庫型別。

資料庫連線建立後不需要長期持有 db ,連線會一直存在,直到應用程式關閉或呼叫 removeDatabase() 為止才會關閉。

操作資料庫

一個基礎的查詢命令如下:

query = QSqlQuery()
isSuccess = query.exec("select count(*) from `user`;")
if not isSuccess:
  print(query.lastError().text())
if query.next():
  count = query.value(0)

建立查詢物件

建立 QSqlQuery 物件。此處不需要額外引數,會使用上方初始化時連線的資料庫及 database 。

執行命令

呼叫 exec() 方法執行查詢命令。傳遞引數為查詢語句。該方法會返回1個布林值表示查詢是否成功,失敗時可以通過呼叫 lastError().text() 來獲取失敗原因。

獲取查詢資料

QSqlQuery 提供了 next() 、 prev() 、 first() 、 last() 和 seek() 等方法在返回的記錄中進行導航,可以很容易的進行移動。但需要注意的是, exec() 剛執行結束後是定位在1個無效記錄上,必須先導航到1個有效的記錄上才能獲取資料。

可以通過 isValid() 來判斷當前是否處在一條無效的記錄上。

另外 next() 、 prev() 、 first() 、 last() 和 seek() 等方法同樣有布林返回值,當導航向的記錄無效時會返回 False ,可以通過返回值來輔助判斷是否已經查詢超出了邊界值。

與 QtTableView 進行資料繫結

建立資料模型

self.model = QtSql.QSqlTableModel(self)
self.model.setTable('user')
self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
self.model.select()

setTable() 是指定當前 model 關聯的是哪張表。

setEditStrategy() 是設定修改模型。其引數是個列舉,共有3個值。

  • OnFieldChange :模型的任何將立即更新到資料庫。
  • OnRowChange :當用戶選擇不同的行時,將應用對行(改動過的行)的更改。
  • OnManualSubmit :所有更改將在模型中快取,直到 submitAll() 或者 revertAll() 被呼叫。

select() 是從關聯的表中獲取資料,預設是獲取全部資料。

關聯 QtTableView

self.tableView.setModel(self.model)

將上文建立的 model 設定給 tableView 即可在 tableView 上展示表中資料。

顯示的列名預設是資料庫中表的列表,可以通過下方程式碼自定義列名。

self.model.setHeaderData(0,QtCore.Qt.Horizontal,'ID')

使用 QSqlTableModel 會返回所有列,如果有列不希望展示出來,可以通過下方程式碼隱藏列。

self.tableView.setColumnHidden(3,True)

到此這篇關於PyQt中使用QtSql連線MySql資料庫的方法的文章就介紹到這了,更多相關PyQt QtSql連線MySql內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!