如何将列表中的行插入QSqlTableModel中?

问题描述

下面是我的示例代码

class UI(QMainWindow):
    def __init__(self):
        super(UI,self).__init__()
        uic.loadUi("tableview.ui",self)
        self.show()

        db = QsqlDatabase.addDatabase('QsqlITE')
        db.setDatabaseName('book.db')
        db.open()

        self.model = Qtsql.QsqlTableModel(self)
        self.model.setTable("card")
        self.model.select()
        self.tableView.setModel(self.model)

        self.pushButton.clicked.connect(self.edit_items)
        self.add.clicked.connect(self.add_row)

    def add_row(self):
        data_row = ["name",30,"M"]
        con = sqlite3.connect('book.db')
        con.execute("INSERT INTO card(name,age,gender) VALUES (?,?,?)",data_row + [''] * (3 -len(data_row)))
        con.commit()

我正在使用Qtsql.QsqlTableModel和QtableView显示数据库表数据。并使用上面的代码插入数据。插入新行时,QtableView不会自动更新。必须关闭并重新打开它才能看到更新。 我的问题:是否有使用QsqlTableModel将列表中的数据插入数据库的可行方法

解决方法

如果要重新加载整个表,则仅需使用select方法,另一方面,如果要使用QSqlTableModel插入行,则必须使用QSqlRecord:

def add_row(self):
    r = self.model.record()
    r.setValue("name","name")
    r.setValue("age",30)
    r.setValue("gender","M")
    self.model.insertRecord(-1,r)
    self.model.select()