在PyQt中,可以使用Qt SQL模块来连接和操作数据库,包括进行数据筛选。以下是一个简单的示例,展示了如何使用PyQt5和Qt SQL模块来连接SQLite数据库并进行数据筛选:
首先,确保已经安装了PyQt5和Qt SQL模块。如果尚未安装,可以使用以下命令进行安装:
pip install PyQt5
接下来,创建一个简单的PyQt应用程序,并连接到SQLite数据库。在这个示例中,我们将连接到一个名为example.db
的数据库,该数据库包含一个名为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__() # 创建一个QTableView控件来显示数据 self.tableView = QTableView() # 创建一个QLineEdit控件来输入筛选条件 self.filterEdit = QLineEdit() # 创建一个QPushButton控件来执行筛选操作 self.filterButton = QPushButton("筛选") self.filterButton.clicked.connect(self.filterData) # 创建一个垂直布局并将控件添加到布局中 layout = QVBoxLayout() layout.addWidget(self.filterEdit) layout.addWidget(self.filterButton) # 创建一个QWidget控件并将布局添加到控件中 container = QWidget() container.setLayout(layout) # 将QTableView控件添加到主窗口的中心区域 self.setCentralWidget(container) # 连接到SQLite数据库 db = QSqlDatabase.addDatabase("QSQLITE") db.setHostName("") db.setDatabaseName("example.db") db.open() # 创建一个QSqlQueryModel控件来存储查询结果 self.queryModel = QSqlQueryModel() # 创建一个QSqlQuery控件来执行SQL查询 self.query = QSqlQuery() self.query.exec_("SELECT * FROM employees") # 将查询结果设置到QSqlQueryModel控件中 self.queryModel.setQuery(self.query) # 将QSqlQueryModel控件设置为QTableView控件的模型 self.tableView.setModel(self.queryModel) def filterData(self): # 获取筛选条件 filterText = self.filterEdit.text() # 创建一个新的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") # 执行查询并更新QSqlQueryModel控件中的数据 query.exec_() self.queryModel.setQuery(query) if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_())
在这个示例中,我们创建了一个简单的界面,其中包含一个用于输入筛选条件的QLineEdit控件和一个用于执行筛选操作的QPushButton控件。当用户点击按钮时,将调用filterData
方法来执行筛选操作。
在filterData
方法中,我们首先获取筛选条件,然后创建一个新的QSqlQuery控件。如果筛选条件不为空,我们会在SQL查询中添加一个WHERE子句,并使用LIKE操作符来匹配包含筛选条件的名称。如果筛选条件为空,我们将执行一个简单的SELECT查询。
最后,我们执行查询并更新QSqlQueryModel控件中的数据,从而刷新QTableView控件中显示的数据。