在MYSLQ数据库中输入的数据一旦被保存,就不会自动显示。

问题描述 投票:0回答:1

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

这是我的代码。

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_())

这是我的小工具的图片

Save name and Surname to DB

python pyqt4 mysql-python
1个回答
0
投票

不要用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注入的影响。

© www.soinside.com 2019 - 2024. All rights reserved.