【发布时间】:2019-03-25 02:11:51
【问题描述】:
我需要执行查询来限制表中显示的行。我为读写功能选择了 QTableView/QSqlTableModel。不幸的是,我的查询使表格无法编辑。
编辑:这不是我真正的程序。我将使用几个表和一个关系除法查询来确定要显示的行。我确实需要使用查询。
如何执行查询并保留读写功能?
import sys
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel, QSqlQuery
def createDb():
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("temp.db")
if not db.open():
print("Cannot establish a database connection.")
return False
query = QSqlQuery()
query.exec_("DROP TABLE IF EXISTS customers")
query.exec_("CREATE TABLE customers (customer_id INTEGER PRIMARY KEY NOT NULL, "
"customer CHAR NOT NULL)")
query.exec_("INSERT INTO customers (customer) VALUES ('Customer 1')")
query.exec_("INSERT INTO customers (customer) VALUES ('Customer 2')")
query.exec_("INSERT INTO customers (customer) VALUES ('Customer 3')")
query.exec_("INSERT INTO customers (customer) VALUES ('Customer 4')")
return True
class MainForm(QTableView):
def __init__(self):
super().__init__()
self.model = QSqlTableModel(self)
self.model.setTable("customers")
# This query results in a non-editable table.
self.query = QSqlQuery("SELECT customer FROM customers WHERE customer_id = 2")
self.model.setQuery(self.query)
self.view = QTableView(self)
self.view.setModel(self.model)
if __name__ == "__main__":
app = QApplication(sys.argv)
createDb()
w = MainForm()
w.show()
sys.exit(app.exec_())
【问题讨论】:
-
你说:这不是我真正的程序。我将使用几个表和一个关系除法查询来确定要显示的行。我确实需要使用查询。,那么您显示的代码不是 MCVE,因此如果您需要帮助,您应该努力工作并提供它。
-
我是编程新手。我认真对待 MCVE。我按照 MCVE 的建议创建了一个新程序。我的程序是最小的。它是完整的(它运行了。)它是可验证的(你可以在它运行时看到问题。)
-
我已经为您提供了针对您提供的 mcve 的解决方案,它解决了它,但它并没有解决您的背景问题,因此表明您的 mcve 不验证你的后台错误,明白吗?
标签: python sqlite pyqt pyqt5 qsqltablemodel