You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6:数据库插入成功后如何清空QPlainTextEdit与QComboBox?

解决PySide6批量插入数据库后仅成功才清空控件的问题

核心思路

利用数据库事务机制,将所有插入操作作为一个整体执行:

  • 所有数据插入完成后统一提交事务
  • 通过try-except捕获异常,失败时回滚事务,不执行清空操作
  • 仅当全部插入成功并提交后,才执行控件清空逻辑

修改后的代码

def commit(self):
    self.inserebd()
    tree_data = self.dadostree()
    self.contarserie()

    sql = """INSERT INTO "Teste"("DataEntrada","Código de Barras","Numero de serie","Categoria","Marcasss","Modelo","Fornecedores","Estado","Projeto","Valor/Uni","Quantidade") VALUES  (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
    
    try:
        # 循环执行所有插入操作,但暂不提交
        for paren_data, children_data in tree_data:   
            codigo_barras = paren_data
            if not children_data:
                dados = (self.data, codigo_barras, 'No', self.idC, self.id, self.modelo, self.idf, self.estado, self.projeto, self.valor, self.quantidade)
                cursor.execute(sql, dados)
        
        # 所有插入成功后,统一提交事务
        con.commit()
        QtWidgets.QMessageBox.information(self, "Sucesso", f" {self.total_serie} Produtos Inseridos")
        
        # 仅在提交成功后执行控件清空
        self.ui.treeWidget.clear()
        self.ui.textmodelo.clear()
        self.ui.textEdit.clear()
        self.ui.textEdit_Data.clear()
        self.ui.textEdit_Preco.clear()
        self.dodo = [] 
        self.ui.comboBox.setCurrentIndex(self.default_item_index)
        self.ui.comboBox_Marca.setCurrentIndex(self.default_item_index)
    
    except Exception as e:
        # 插入失败时回滚事务,保留输入数据
        con.rollback()
        QtWidgets.QMessageBox.critical(self, "Erro", f"插入失败: {str(e)}")

关键改动说明

  1. 事务统一提交:把con.commit()从循环内移到循环结束后,确保所有数据都插入成功才提交,避免出现部分数据插入成功的不一致情况
  2. 异常捕获与回滚:用try-except包裹整个插入流程,捕获数据库操作异常,失败时执行con.rollback()回滚事务,保证数据完整性
  3. 清空逻辑位置:将控件清空代码放在con.commit()之后、try块内部,确保只有全部数据插入成功才执行清空操作
  4. 提示框优化:将成功提示移到循环外,避免插入多条数据时重复弹出提示框

内容的提问来源于stack exchange,提问作者Shadow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:13:10