【问题标题】:How to show all rows containing a specific name on QTableView from an sqlite database如何在 SQLite 数据库中的 QTableView 上显示包含特定名称的所有行
【发布时间】:2018-07-30 19:45:48
【问题描述】:

我正在使用 Pyqt 设计一个程序,用于将数据存储到 sqlite 数据库并使用 QTableView 检索它。显然,我想检索一个特定的列,如“name”并显示所有名为“Anderson”的行。以下代码失败,因为它错过了很多。

database = QtSql.QSqlDatabase().addDatabase('QSQLITE')
database.setDatabaseName('database.db')
database.open()
model = QtSql.QSqlTableModel()
#model.setQuery("SELECT Name, Sale, Date FROM Individuals")
model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
model.select()
self.tableView.setModel(model)
self.tableView.setShowGrid(False)
model.setHeaderData(0, QtCore.Qt.Horizontal, "Name")
model.setHeaderData(1, QtCore.Qt.Horizontal, "Amount")
model.setHeaderData(2, QtCore.Qt.Horizontal, "Date")
self.tableView.horizontalHeader().setVisible(True)
print(model.setFilter("SELECT Name = 'Anderson' FROM Individuals"))

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qtableview


    【解决方案1】:

    如果docs 被审核:

    void QSqlTableModel::setFilter(const QString &filter)

    将当前过滤器设置为过滤器。

    过滤器是一个没有关键字 WHERE 的 SQL WHERE 子句(对于 例如,name='Josephine')。

    如果模型已经填充了数据库中的数据,则模型 使用新过滤器重新选择它。否则,过滤器将 下次调用 select() 时应用。

    在你的情况下:

    model = QtSql.QSqlTableModel()
    model.setTable("Individuals")
    model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
    model.select()
    model.setFilter("Name='Anderson'")
    self.tableView.setModel(model)
    

    【讨论】:

    • 当我尝试 print(model.setFilter("Name = 'Anderson'") 它返回 None
    • @And3r50n1 这个函数不返回任何东西,它只过滤你在QTableView中看到的数据。你想要什么?
    • 我想获取所有名为 Anderson 的行
    • @And3r50n1 你说的行是什么意思,你的意思是一个包含这些信息的列表列表
    • @And3r50n1 我已经更新了我的答案,请查看它。
    猜你喜欢
    • 2013-08-11
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2018-07-17
    • 2018-01-10
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多