如虎添翼!在PyQt5中便捷的進行資料庫操作!
在桌面影象化介面程式設計中,我們通常需要將一些資料或配置資訊儲存在本地。在本地進行資料的儲存,我們可以直接使用文字檔案,比如ini檔案、csv檔案、json檔案等,或者是使用檔案型的資料庫(比如sqlit3)進行儲存。
Qt平臺對SQL程式設計有著良好的支援,PyQt5也一併繼承了過來。在PyQt5中,QtSql子模組提供對SQL資料庫的支援:
從上圖我們可以發現,QtSQL模組中包含了很多個類,這些類歸總起來主要包含三大部分:
● 驅動層,用於提供特定資料庫與SQL API介面之間的低階連線功能;其中包括QSqlDriver、QSqlDriverCreatorBase、QSqlResult;
● SQL API層,用於提供對資料庫的訪問。通常來說,我們會使用QSqlDatabase建立資料庫連線,使用QSqlQuery等類實現資料庫的互動(執行SQL語句)。此外還有QSqlError、QSqlField、QSqlIndex、QSqlRecord等類。
● 使用者介面操作層,用於將資料庫操作的資料鏈接到PyQt相應的資料小部件,將資料和操作展示在Qt介面中。這些類包括:QSqlQueryModel、QSqlTableModel等。
在這些類中,每個類都有自己特定的用途,其中:
● QSQL:包含整個Qt SQL模組中使用的各種識別符號
● QSqlDatabase:處理與資料庫的連線
● QSqlDriver:用於訪問特定SQL資料庫的抽象基類
● QSqlDriverCreator:模板類,為特定驅動程式型別提供SQL驅動程式工廠
● QSqlDriverCreatorBase:SQL驅動程式工廠的基類
● QSqlError:SQL資料庫錯誤資訊
● QSqlField:處理SQL資料庫表和檢視中的欄位
● QSqlIndex:用於操作和描述資料庫索引的函式
● QSqlQuery:執行和操作SQL語句的方法
● QSqlQueryModel:SQL結果集的只讀資料模型
● QSqlRecord:封裝資料庫記錄
● QSqlRelationalTableModel:具有外來鍵支援的單個數據庫表的可編輯資料模型
● QSqlResult:用於從特定SQL資料庫訪問資料的抽象介面
● QSqlTableModel:單個數據庫表的可編輯資料模型
在實際的PyQt程式設計中,我們很少使用驅動層的類,多通過API層的來建立資料庫連線、進行資料庫查詢等,然後通過使用者介面操作層的類將資料結果顯示在圖形介面中。下面我們就來簡單使用一下。
在PyQt5中簡單使用資料庫
建立一個UI介面
首先,我們通過PyQt5建立一個基本的圖形介面。這個介面由兩個部分組成:
● 按鈕操作層:用來通過按鈕進行資料庫操作;
● 資料庫展示層:用來展示資料庫表的資訊;
UI介面的程式碼如下所示:
最終顯示出來的UI介面如下圖所示:
連線一個數據庫
在上面建立的UI介面中,我們有一個“建立資料庫”的按鈕,這個按鈕我們用來建立一個數據庫連線。
Qt中內建了好幾個資料庫的驅動程式,也就是說我們可以直接在PyQt中對這些資料庫進行操作。這些內建的資料庫包括:
● IBM DB2,驅動名為QDB2;
● Borland InterBase,驅動名為QIBASE;
● MySQL,驅動名為QMYSQL;
● Oracle,驅動名為QOCI;
● Microsoft SQL Server和其他符合ODBC的資料庫,驅動名為QODBC;
● PostgreSQL,驅動名為QPSQL;
● SQLite3,驅動名為QSQLITE;
通過這些驅動名,我們可以藉助QSqlDatabase類的addDatabase方法新增某個資料庫的連線,比如建立一個MySQL資料庫的連線為:
為了方便演示,在此我們使用Sqlite資料庫。
在MainUi()類中,我們建立一個名為create_db()的方法:
在這個方法中,我們自定義資料庫名並建立一個sqlite資料庫,然後在這個資料庫中建立了一個名為zmister的資料庫表,最後在zmister資料庫表中插入了三條資料。
接下來,我們將這個方法繫結到【建立資料庫】按鈕的點選事件上:
這樣,當我們點選【建立資料庫】按鈕的時候,UI介面會彈出一個文字輸入框供我們輸入資料庫的名稱,然後建立一個數據表並插入資料:
完成操作之後,會發現檔案同級目錄下多出了一個zmister.sqlite檔案,我們使用SQLite Expert等SQLite資料庫視覺化軟體開啟它:
這樣,我們就成功在PyQt5中建立連線並寫入操作了一個數據庫。
在UI介面檢視和修改資料
上面我們建立了一個SQLite資料庫並在其中寫入了三條資料,如何將資料表中的資料顯示在UI介面中呢。我們可以藉助QSqlTableModel類來實現。
還記得我們在建立UI介面的時候,在介面的右方放置了一個QTableView()部件,我們的資料庫資料將顯示在這上面。
繼續在MainUi()類中建立一個名為view_data()的方法,在方法中例項化一個QSqlTableModel(),並將QTableView()部件的model模型設定為例項化後的QSqlTableModel():
然後,將view_data()方法繫結在UI介面的【瀏覽資料】按鈕的點選事件中:
這樣,我們在點選【瀏覽資料】按鈕的時候,會將zmister表中的所有資料顯示出來:
除了簡單的將資料顯示在UI介面上,我們還可以直接在UI介面上修改資料:
新增和刪除資料
完成查和改的SQL操作之後,我們接著來了解一下如何新增資料和刪除資料。
新增資料通過資料模型物件的insertRows()方法來實現,刪除資料則通過資料模型物件的removeRow()方法來實現。
我們繼續在MainUi()類中建立兩個方法:addrowdata()和delrowdata():
然後將這兩個方法分別繫結在【新增一行】和【刪除一行】按鈕的點選事件上:
這樣就實現了UI介面上的新增資料和刪除資料:
