溫馨提示×

pyqt sql如何進行數(shù)據(jù)篩選

sql
小樊
81
2024-10-20 00:29:10
欄目: 云計算

在PyQt中,可以使用Qt SQL模塊來連接和操作數(shù)據(jù)庫,包括進行數(shù)據(jù)篩選。以下是一個簡單的示例,展示了如何使用PyQt5和Qt SQL模塊來連接SQLite數(shù)據(jù)庫并進行數(shù)據(jù)篩選:

首先,確保已經(jīng)安裝了PyQt5和Qt SQL模塊。如果尚未安裝,可以使用以下命令進行安裝:

pip install PyQt5

接下來,創(chuàng)建一個簡單的PyQt應(yīng)用程序,并連接到SQLite數(shù)據(jù)庫。在這個示例中,我們將連接到一個名為example.db的數(shù)據(jù)庫,該數(shù)據(jù)庫包含一個名為employees的表。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QVBoxLayout, QWidget, QPushButton, QLineEdit
import sqlite3
from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 創(chuàng)建一個QTableView控件來顯示數(shù)據(jù)
        self.tableView = QTableView()

        # 創(chuàng)建一個QLineEdit控件來輸入篩選條件
        self.filterEdit = QLineEdit()

        # 創(chuàng)建一個QPushButton控件來執(zhí)行篩選操作
        self.filterButton = QPushButton("篩選")
        self.filterButton.clicked.connect(self.filterData)

        # 創(chuàng)建一個垂直布局并將控件添加到布局中
        layout = QVBoxLayout()
        layout.addWidget(self.filterEdit)
        layout.addWidget(self.filterButton)

        # 創(chuàng)建一個QWidget控件并將布局添加到控件中
        container = QWidget()
        container.setLayout(layout)

        # 將QTableView控件添加到主窗口的中心區(qū)域
        self.setCentralWidget(container)

        # 連接到SQLite數(shù)據(jù)庫
        db = QSqlDatabase.addDatabase("QSQLITE")
        db.setHostName("")
        db.setDatabaseName("example.db")
        db.open()

        # 創(chuàng)建一個QSqlQueryModel控件來存儲查詢結(jié)果
        self.queryModel = QSqlQueryModel()

        # 創(chuàng)建一個QSqlQuery控件來執(zhí)行SQL查詢
        self.query = QSqlQuery()
        self.query.exec_("SELECT * FROM employees")

        # 將查詢結(jié)果設(shè)置到QSqlQueryModel控件中
        self.queryModel.setQuery(self.query)

        # 將QSqlQueryModel控件設(shè)置為QTableView控件的模型
        self.tableView.setModel(self.queryModel)

    def filterData(self):
        # 獲取篩選條件
        filterText = self.filterEdit.text()

        # 創(chuàng)建一個新的QSqlQuery控件
        query = QSqlQuery()

        # 如果篩選條件不為空,則添加WHERE子句
        if filterText:
            query.prepare("SELECT * FROM employees WHERE name LIKE :name")
            query.bindValue(":name", "%" + filterText + "%")
        else:
            query.prepare("SELECT * FROM employees")

        # 執(zhí)行查詢并更新QSqlQueryModel控件中的數(shù)據(jù)
        query.exec_()
        self.queryModel.setQuery(query)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

在這個示例中,我們創(chuàng)建了一個簡單的界面,其中包含一個用于輸入篩選條件的QLineEdit控件和一個用于執(zhí)行篩選操作的QPushButton控件。當(dāng)用戶點擊按鈕時,將調(diào)用filterData方法來執(zhí)行篩選操作。

filterData方法中,我們首先獲取篩選條件,然后創(chuàng)建一個新的QSqlQuery控件。如果篩選條件不為空,我們會在SQL查詢中添加一個WHERE子句,并使用LIKE操作符來匹配包含篩選條件的名稱。如果篩選條件為空,我們將執(zhí)行一個簡單的SELECT查詢。

最后,我們執(zhí)行查詢并更新QSqlQueryModel控件中的數(shù)據(jù),從而刷新QTableView控件中顯示的數(shù)據(jù)。

0