我的Sqlite数据库如下所示(简化):
CREATE TABLE Scene(
sceneID INTEGER PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE Character(
characterID INTEGER PRIMARY KEY,
fullName TEXT NOT NULL
);
CREATE TABLE CharacterInScene(
characterID INTEGER,
sceneID INTEGER,
PRIMARY KEY(characterID, sceneID),
FOREIGN KEY(characterID) REFERENCES Character(characterID),
FOREIGN KEY(sceneID) REFERENCES Scene(sceneID)
);
INSERT INTO Scene (1, "Police Station");
INSERT INTO Character (1, "Harrison Ford");
INSERT INTO Character (2, "Rutger Hauer");
INSERT INTO CharacterInScene(1, 1);
因此,我只有一个场景“警察局”,其中包含Harrison Ford,但没有Rutger Hauer。在我的UI中,我正在编辑该场景的内容。并具有如下界面:
现在,这些是通过以下查询连接到两个QSqlQueryModel的两个QListView:
1. SELECT * FROM Character WHERE characterID NOT IN
(SELECT characterID FROM CharacterInScene WHERE sceneID=1)
2. SELECT * FROM Character WHERE characterID IN
(SELECT characterID FROM CharacterInScene WHERE sceneID=1)
我希望箭头按钮将选定的条目从一个列表移动到另一个列表,并希望应用按钮在db中执行更改。但是由于QSqlQueryModel的只读性质,因此按我现在设置的那样,这确实站不住脚。
做到这一点的最佳方法是什么?我假设我想实现自己的QSqlTableModel,但是我不确定如何实现,而且我也找不到任何类似于我的情况的好例子。也许我想得太多了。
我正在PyQt5中工作,但是我可以从C++翻译。
最佳答案
您不必实现任何自定义模型或使QSqlQueryModel
可编辑,记录的插入和删除。您可以使用QSqlQuery
完成此任务,并调用模型的更新。
def addToScene(self):
for ix in self.notInScene.listView.selectionModel().selectedIndexes():
id = self.notInScene.model.record(ix.row()).value("characterID")
query = QSqlQuery()
query.prepare("INSERT INTO CharacterInScene VALUES (:characterID, :sceneID);")
query.bindValue(":characterID", id)
query.bindValue(":sceneID", self.sceneId)
if not query.exec_():
print(query.lastError().text())
self.updateList() # update the model
def removeFromScene(self):
for ix in self.inScene.listView.selectionModel().selectedIndexes():
id = self.inScene.model.record(ix.row()).value("characterID")
query = QSqlQuery()
query.prepare("DELETE FROM CharacterInScene WHERE characterID = :characterID AND sceneID = :sceneID;")
query.bindValue(":characterID", id)
query.bindValue(":sceneID", self.sceneId)
if not query.exec_():
print(query.lastError().text())
self.updateList() # update the model
完整的示例可以在以下link中找到
关于python - Qt:从一个QSqlTableModel在两个QListViews之间移动条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47024950/