Как отобразить результаты QSqlRelationalTableModel InnerJoin
Я создал простую модель для понимания внутренних объединений в PyQt5. Мои данные таковы:
CREATE TABLE `admissions` (`StudentID` INTEGER PRIMARY KEY AUTOINCREMENT, `Name` TEXT, `National ID` INTEGER);
INSERT INTO `admissions` VALUES (1,'Patrick Jones',1223);
INSERT INTO `admissions` VALUES (2,'Steve Jones',1224);
CREATE TABLE `grades` (`Id` INTEGER PRIMARY KEY AUTOINCREMENT, `StudentID` INTEGER, `Math` INTEGER, `Physics` INTEGER, `Chemistry` INTEGER, `Biology` INTEGER, FOREIGN KEY(`StudentID`) REFERENCES `admissions`(`StudentID`));
INSERT INTO `grades` VALUES (1,1,56,40,35,40);
INSERT INTO `grades` VALUES (2,2,34,40,45,40);
Я могу присоединить оценки учеников к их именам, запустив:
SELECT admissions.Name, grades.Math, grades.Physics, grades.Chemistry FROM admissions INNER JOIN grades ON admissions.StudentID = grades.StudentID;
Я пытался сделать то же самое в PyQt5, но я не могу. Что я делаю неправильно? Мой код:
def initializeModel(model):
model.setTable('admissions')
model.setJoinMode(QSqlRelationalTableModel.InnerJoin)
model.setRelation(0, QSqlRelation("grades", "studentid", "math"))
#model.selectStatement()
model.select()
def createView(model):
view = QTableView()
view.setModel(model)
view.hideColumn(2)
view.setColumnWidth(1, 200)
return view
if __name__ == '__main__':
import sys
qApp = QApplication(sys.argv)
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName("drinks.db")
db.open()
sqm = QSqlRelationalTableModel()
initializeModel(sqm)
view1 = createView(sqm)
vbox = QVBoxLayout()
vbox.addWidget(view1)
window = QWidget()
window.setLayout(vbox)
window.setWindowTitle("Database demo 2")
window.show()
sys.exit(qApp.exec_())