从sqlalchemy中的before_insert事件中止插入

时间:2014-11-17 21:47:47

标签: python sqlalchemy

我正在使用before_insert在金字塔应用程序中为我的某个模型添加自动验证。

到目前为止,我已经得到了这个:

def Property_before_insert_listener(mapper, connection, target):
    formvalidator =  PropertySchema()
    try:
        return formvalidator.to_python(target.__table__.columns)
    except formencode.Invalid as error:
        print ("***************************************ERROR" + str(error))


event.listen(
    Property, 'before_insert', Property_before_insert_listener)

一切似乎都运行正常,我在控制台中打印出正确的错误。但是,在处理错误之后,它继续插入。如何阻止插入发生?

1 个答案:

答案 0 :(得分:1)

Mapper Events的sqlAlquemy文档中,您有一些可能对您有帮助的内容:

  

<强> RETVAL =假

     

当为True时,用户定义的事件函数必须具有返回值,其目的是控制后续事件传播,或以其他方式改变映射器正在进行的操作。可能的返回&gt;值是:

     
      
  • sqlalchemy.orm.interfaces.EXT_CONTINUE - 正常继续事件处理。
  •   
  • sqlalchemy.orm.interfaces.EXT_STOP - 取消链中的所有后续事件处理程序。
  •   
  • 其他值 - 特定侦听器指定的返回值。
  •