0

当我附加到处理程序中的属性事件(“附加”)以取消附加操作时,是否有可能?

假设我在处理程序中对每个附加记录进行了一些验证,如果记录没有通过验证,我想被跳过。

4

1 回答 1

1

请参阅sqlalchemy.orm.validates以了解另一种执行验证的方式,这会产生一些更简洁的代码。根据文档:

然后,该函数可以引发验证异常以停止进程继续(其中 Python 的内置 ValueError 和 AssertionError 异常是合理的选择),或者可以在继续之前修改或替换值。否则,该函数应返回给定值。

class User(...):
    # ...
    addresses = relationship("Address")

    @validates('addresses')
    def _modify_addresses(self, key, target):
        if target.phone is None
            raise ValueError("User addresses must have a phone number!")
        return target

根据文档,您可以修改添加到集合中的值。但要完全避免添加它,您需要引发异常。显然,您需要在外部代码中处理此异常:

def _add_addresses(user, address_list):
    for address in address_list:
        try:
            user.addresses.append(address)
        catch ValueError as _exc:
            logging.warn("Could not add Address [%s] to the User [%s]", address, user.name)
于 2012-06-29T14:00:32.270 回答