在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ù)。