在 MYSQL 数据库中输入的数据不会在保存后自动显示

Data entered in an MYSLQ db does not automatically display once Saved

我正在使用 python 3.4 编写一个程序,允许用户输入他们的名字和姓氏,一旦他们点击保存,数据应该保存在数据库中并在屏幕上显示。数据保存到数据库很好(我知道这一点是因为每次我关闭程序并 运行 它显示前一个条目)。我的问题是,当我输入数据并点击保存时,它不会自动显示在 tabelView 小部件的屏幕上。我使用 QT designer 4 创建小部件,我的数据库 table 仅包含两列,Full_Name 和姓氏。我怎样才能在点击保存按钮后立即显示我的条目?

这是我的代码:

import sys
from Nametest import *
from PyQt4 import QtSql, QtGui
import mysql.connector
conn=mysql.connector.connect(host="localhost", user="root", passwd="shotokan", db="name")
cursor=conn.cursor()


def createConnection():
    db = QtSql.QSqlDatabase.addDatabase('QMYSQL')
    db.setHostName('localhost')
    db.setDatabaseName('name')
    db.setUserName('root')
    db.setPassword('shotokan')
    db.open()
    print (db.lastError().text())
    return True
class MyForm(QtGui.QDialog):
    def __init__(self, parent=None):
       QtGui.QWidget.__init__(self, parent)
       self.ui = Ui_Dialog()
       self.ui.setupUi(self)
       self.model = QtSql.QSqlTableModel(self)
       self.model.setTable("fullname")
       self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
       self.model.select()
       self.ui.tableView.setModel(self.model)


       QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()' ),self.InsertRecords)



     def InsertRecords(self):

         cursor.execute( """INSERT INTO fullname (First_Name, Surname)VALUES('%s','%s')""" %(self.ui.lineEdit.text(),self.ui.lineEdit_2.text()))
    conn.commit()



 if __name__ == "__main__":
      app = QtGui.QApplication(sys.argv)
      if not createConnection():
             sys.exit(1)
      myapp = MyForm()
      myapp.show()
      sys.exit(app.exec_())

这是我的小部件的图片:

不要使用 2 种技术来完成相同的任务,如果您使用 QSqlTableModel 来显示信息,那么请使用该模型来执行插入:

class MyForm(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.model = QtSql.QSqlTableModel(self)
        self.model.setTable("fullname")
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
        self.model.select()
        self.ui.tableView.setModel(self.model)

        self.ui.pushButton.clicked.connect(self.InsertRecords)

    def InsertRecords(self):
        db = self.model.database()
        db.transaction()
        record = self.model.record()
        record.setValue("First_Name", self.ui.lineEdit.text())
        record.setValue("Surname", self.ui.lineEdit_2.text())
        if self.model.insertRecord(-1, record):
            print("successful insertion")
            self.model.submitAll()
        else:
            db.rollback()

注意:不要使用串联来创建查询,因为您的应用程序容易受到 SQL 注入的影响。