Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用insertRecord时如何正确处理QSqlTableModel中的错误_Python_Pyqt_Qsqltablemodel - Fatal编程技术网

Python 使用insertRecord时如何正确处理QSqlTableModel中的错误

Python 使用insertRecord时如何正确处理QSqlTableModel中的错误,python,pyqt,qsqltablemodel,Python,Pyqt,Qsqltablemodel,我到处找了,但找不到解决问题的办法。我所要做的就是通过表单将一条新记录插入数据库,如果该记录成功插入[行编辑中的有效条目]则清除该表单;否则抛出一个错误。下面请看一个最小的代码。为了提供一些上下文,表中的“state”字段有一个限制,仅接受2个字符[状态缩写]。在insert方法中,if else语句会导致以下行为。如果我插入了有效记录,[John,NY]该记录将成功插入;但是,QMessageBox也会出现在屏幕上,但不会显示任何错误。此外,表单(行编辑)不会被清除。如果我试图插入一条无效记录

我到处找了,但找不到解决问题的办法。我所要做的就是通过表单将一条新记录插入数据库,如果该记录成功插入[行编辑中的有效条目]则清除该表单;否则抛出一个错误。下面请看一个最小的代码。为了提供一些上下文,表中的“state”字段有一个限制,仅接受2个字符[状态缩写]。在insert方法中,if else语句会导致以下行为。如果我插入了有效记录,[John,NY]该记录将成功插入;但是,QMessageBox也会出现在屏幕上,但不会显示任何错误。此外,表单(行编辑)不会被清除。如果我试图插入一条无效记录[John,New York],QMessageBox会出现检查违规错误,编辑行中的条目会保留在那里;但是,当我更正状态条目(将纽约更改为纽约)并再次按下按钮时,我仍然会在屏幕上收到相同的错误消息,但在后台,记录被插入到表中;而且表单也没有被清除。 然后我尝试使用try-except-else块,但也不起作用。如果输入有效,则可以正常工作。但是,如果我在状态行中输入了无效值,则不会显示编辑QMessageBox;表格也会被清除。不知道我做错了什么

导入系统 从PyQt5将QtWidgets作为qtw导入 将PyQt5.QtSql作为qpsql导入 类主窗口(qtw.QMainWindow): 定义初始化(self,*args,**kwargs): super() self.layout=qtw.QVBoxLayout() self.first\u name\u line\u edit=qtw.QLineEdit('first\u name')) self.state\u line\u edit=qtw.QLineEdit('state')) self.layout.addWidget(self.first\u name\u line\u edit) self.layout.addWidget(self.state\u line\u edit) self.insert_button=qtw.QPushButton('insert')) self.insert_按钮。单击。连接(self.insert) self.layout.addWidget(self.insert_按钮) self.model=qpsql.QSqlTableModel(db=db_382;) self.table=qtw.QTableView() self.table.setModel(self.model) self.mapper=qtw.QDataWidgetMapper() self.mapper.setModel(self.model) self.mapper.setSubmitPolicy(qtw.QDataWidgetMapper.ManualSubmitPolicy) self.model.setTable('table')) self.mapper.addMapping(self.first\u name\u line\u edit,self.model.fieldIndex('first\u name')) self.mapper.addMapping(self.state\u line\u edit,self.model.fieldIndex('state')) self.model.select() self.layout.addWidget(self.table) self.widget=qtw.QWidget() self.widget.setLayout(self.layout) self.setCentralWidget(self.widget) def清除(自身): self.first\u name\u line\u edit.clear() self.state\u line\u edit.clear() def插入(自): record=self.model.record() record.setValue('first\u name',self.first\u name\u line\u edit.text()) record.setValue('state',self.state\u line\u edit.text()) # 1. 记录被插入;QMessageBox弹出,打印无误;行编辑不清楚。 如果self.model.insertRecord(-1,记录): self.model.submitAll() self.clear() 其他: qtw.QMessageBox.critical(无,“错误”,self.model.lastError().text()) # 2. QMessageBox不会出现;线条编辑变得清晰; #尝试: #self.model.insertRecord(-1,记录) #self.model.submitAll() #除例外情况外: #qtw.QMessageBox.critical(无,“错误”,self.model.lastError().text()) #其他: #self.clear() 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=qtw.QApplication(sys.argv) 窗口=主窗口() window.show() sys.exit(app.exec_())