flask_sqlalchemy 插入数据时发生错误后如何处理?

使用flask_sqlalchemy在插入数据发生错误的时候应该如何处理?

相关模型如下:

class Supplier(db.Model):
    ID = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(250), unique=True, nullable=False)

视图中的操作如下:

@supplier.route('/purchase/supplier/add', methods=['GET', 'POST'])
def add_supplier():
    form = SupplierForm(request.form)
    if request.method == 'POST' and form.validate():
        supplier = Supplier(form.supplier_name.data)
        db.session.add(supplier)
        db.session.commit()
    return redirect(url_for('supplier.list_supplier'))

当我插入两个相同的supplier_name时,就会出现这样的错误:sqlalchemy.exc.IntegrityError,当我返回,尝试重新输入时,出现了这样的错误:sqlalchemy.exc.InvalidRequestError

我期望的结果是可以有一个办法知道这个数据不符合要求并提示用户修改输入,请问应该如何处理?

谢谢~

阅读 4.6k
评论
    2 个回答
    • 751
    @supplier.route('/purchase/supplier/add', methods=['POST'])
    def add_supplier():
        form = request.form
        if request.method == 'POST':
            print(form)
            supplier = Supplier(form['supplier_name'],
                                form['supplier_constract'],
                                form['supplier_phone'],
                                form['supplier_address'],
                                form['supplier_remark'])
            try:
                db.session.add(supplier)
                db.session.commit()
                flash('供应商添加成功!', 'success')
            except:
                db.session.rollback()
                flash('输入不合法,请重新输入!', 'danger')
        return redirect(url_for('supplier.list_supplier'))

      这个应该你自己做限制吧,作为开发本身设置了Name unique=True,那么你就有义务在form里验证name的唯一性啊

        撰写回答

        登录后参与交流、获取后续更新提醒