sqlalchemy中的高级模型验证

时间:2013-11-04 16:52:12

标签: python validation sqlalchemy

我有以下模型:

class Foo(DeclarativeBase):
    code = Column(u'code', String(length=255))
    ctype = Column(u'ctype', String(length=255))

我需要验证一个字段,而不是另一个字段。

例如

if ctype == "bar" and code == "buzz": raise ValueError

不要在提交时在db中创建对象和记录。如果没有引起异常,则照常创建。

我试过用。 Simple validators 并尝试使用before_insert mapper event设置'before_insert'事件 并写了这样的代码:

def validate_foo(mapper, connection, target):
    if target.ctype == "bar" and target.code == "buzz":
        raise ValueError

event.listen(Foo, 'before_insert', validate_foo)

当ctype ==“bar”和code ==“buzz”时,它不会在DB中创建任何对象。它没有引起任何异常。但是它创建了Foo对象实例(没有db)。

进行此类验证的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我最终在DB中创建了触发器(我使用postgresql)。并在python代码中捕获完整性错误。