Как отобразить результаты 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_())

0 ответов

Другие вопросы по тегам