PyQt中使用QtSql連接MySql數(shù)據(jù)庫的方法
PyQt 有內(nèi)置的數(shù)據(jù)庫連接類 QtSql 。
在使用 PyQt 連接 MySql 展示數(shù)據(jù)時(shí),如果明確所有數(shù)據(jù)庫操作都與 Qt 窗口有關(guān),且不涉及復(fù)雜的數(shù)據(jù)操作,則可以使用內(nèi)置的 QtSql 類。不需要安裝額外的數(shù)據(jù)庫類,且能更加便利的與 QtTableView 等 Qt 控件進(jìn)行數(shù)據(jù)交互。
初始化
db = QtSql.QSqlDatabase.addDatabase('QMYSQL') db.setHostName('localhost') db.setDatabaseName('dev') db.setUserName('root') db.setPassword('123') db.open()
QMYSQL 代表連接 MySql 數(shù)據(jù)庫,可以通過 QtSql.QSqlDatabase.drivers() 來查詢當(dāng)前版本 PyQt 所支持的數(shù)據(jù)庫類型。
數(shù)據(jù)庫連接創(chuàng)建后不需要長期持有 db ,連接會(huì)一直存在,直到應(yīng)用程序關(guān)閉或調(diào)用 removeDatabase() 為止才會(huì)關(guān)閉。
操作數(shù)據(jù)庫
一個(gè)基礎(chǔ)的查詢命令如下:
query = QSqlQuery() isSuccess = query.exec("select count(*) from `user`;") if not isSuccess: print(query.lastError().text()) if query.next(): count = query.value(0)
創(chuàng)建查詢對象
創(chuàng)建 QSqlQuery 對象。此處不需要額外參數(shù),會(huì)使用上方初始化時(shí)連接的數(shù)據(jù)庫及 database 。
執(zhí)行命令
調(diào)用 exec() 方法執(zhí)行查詢命令。傳遞參數(shù)為查詢語句。該方法會(huì)返回1個(gè)布爾值表示查詢是否成功,失敗時(shí)可以通過調(diào)用 lastError().text() 來獲取失敗原因。
獲取查詢數(shù)據(jù)
QSqlQuery 提供了 next() 、 prev() 、 first() 、 last() 和 seek() 等方法在返回的記錄中進(jìn)行導(dǎo)航,可以很容易的進(jìn)行移動(dòng)。但需要注意的是, exec() 剛執(zhí)行結(jié)束后是定位在1個(gè)無效記錄上,必須先導(dǎo)航到1個(gè)有效的記錄上才能獲取數(shù)據(jù)。
可以通過 isValid() 來判斷當(dāng)前是否處在一條無效的記錄上。
另外 next() 、 prev() 、 first() 、 last() 和 seek() 等方法同樣有布爾返回值,當(dāng)導(dǎo)航向的記錄無效時(shí)會(huì)返回 False ,可以通過返回值來輔助判斷是否已經(jīng)查詢超出了邊界值。
與 QtTableView 進(jìn)行數(shù)據(jù)綁定
創(chuàng)建數(shù)據(jù)模型
self.model = QtSql.QSqlTableModel(self) self.model.setTable('user') self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) self.model.select()
setTable() 是指定當(dāng)前 model 關(guān)聯(lián)的是哪張表。
setEditStrategy() 是設(shè)置修改模型。其參數(shù)是個(gè)枚舉,共有3個(gè)值。
- OnFieldChange :模型的任何將立即更新到數(shù)據(jù)庫。
- OnRowChange :當(dāng)用戶選擇不同的行時(shí),將應(yīng)用對行(改動(dòng)過的行)的更改。
- OnManualSubmit :所有更改將在模型中緩存,直到 submitAll() 或者 revertAll() 被調(diào)用。
select() 是從關(guān)聯(lián)的表中獲取數(shù)據(jù),默認(rèn)是獲取全部數(shù)據(jù)。
關(guān)聯(lián) QtTableView
self.tableView.setModel(self.model)
將上文創(chuàng)建的 model 設(shè)置給 tableView 即可在 tableView 上展示表中數(shù)據(jù)。
顯示的列名默認(rèn)是數(shù)據(jù)庫中表的列表,可以通過下方代碼自定義列名。
self.model.setHeaderData(0, QtCore.Qt.Horizontal, 'ID')
使用 QSqlTableModel 會(huì)返回所有列,如果有列不希望展示出來,可以通過下方代碼隱藏列。
self.tableView.setColumnHidden(3, True)
到此這篇關(guān)于PyQt中使用QtSql連接MySql數(shù)據(jù)庫的方法的文章就介紹到這了,更多相關(guān)PyQt QtSql連接MySql內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Qt連接MySQL數(shù)據(jù)庫的實(shí)現(xiàn)(保姆級成功版教程)
- QT連接Mysql數(shù)據(jù)庫的詳細(xì)教程(親測成功版)
- 可能是全網(wǎng)最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫教程
- qt首次連接MYSQL驅(qū)動(dòng)的各種問題圖文詳解
- QT5連接MySQL實(shí)現(xiàn)增刪改查
- QT連接Mysql數(shù)據(jù)庫的實(shí)現(xiàn)步驟
- Qt5連接并操作PostgreSQL數(shù)據(jù)庫的實(shí)現(xiàn)示例
- QT連接MYSQL數(shù)據(jù)庫的詳細(xì)步驟
- PyQt5連接MySQL及QMYSQL driver not loaded錯(cuò)誤解決
- QT連接SQLServer數(shù)據(jù)庫的實(shí)現(xiàn)
相關(guān)文章
沒有安裝Python的電腦運(yùn)行Python代碼教程
你有沒有遇到過這種情況,自己辛苦碼完了代碼想發(fā)給別人運(yùn)行看效果,可是對方竟然沒安裝Python,這要怎么運(yùn)行呢?本篇文章帶你解決這個(gè)問題,需要的朋友快來看看2021-10-10python爬蟲實(shí)現(xiàn)最新12306搶票
這篇文章主要介紹了python爬蟲實(shí)現(xiàn)最新12306搶票,每到放假過節(jié)的時(shí)候,很多人總是對于搶不到車票而煩惱,那么經(jīng)過我?guī)讉€(gè)小時(shí)的不懈努力,完成了基于python?的12306搶票爬蟲,現(xiàn)在分享給大家。希望對大家有所幫助2022-01-01詳解Python中如何將數(shù)據(jù)存儲為json格式的文件
這篇文章主要介紹了詳解Python中如何將數(shù)據(jù)存儲為json格式的文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python中urllib2模塊的8個(gè)使用細(xì)節(jié)分享
這篇文章主要介紹了Python中urllib2模塊的8個(gè)使用細(xì)節(jié)分享,本文講解了Proxy設(shè)置、Timeout設(shè)置、加入特定Header、Redirect、Cookie、PUT和DELETE方法等內(nèi)容,需要的朋友可以參考下2015-01-01Pygame鼠標(biāo)進(jìn)行圖片的移動(dòng)與縮放案例詳解
pygame是Python的第三方庫,里面提供了使用Python開發(fā)游戲的基礎(chǔ)包。本文將介紹如何通過Pygame實(shí)現(xiàn)鼠標(biāo)進(jìn)行圖片的移動(dòng)與縮放,感興趣的可以關(guān)注一下2021-12-12Python 實(shí)例方法、類方法、靜態(tài)方法的區(qū)別與作用
Python中至少有三種比較常見的方法類型,即實(shí)例方法,類方法、靜態(tài)方法。它們是如何定義的呢?如何調(diào)用的呢?它們又有何區(qū)別和作用呢?感興趣的朋友跟隨小編一起看看吧2019-08-08