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

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

谢谢~

阅读 8.1k
2 个回答
@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的唯一性啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏