Python 用于两个字段的sqlalchemy验证器

Python 用于两个字段的sqlalchemy验证器,python,sqlalchemy,Python,Sqlalchemy,SQLAlchemy文档解释了如何使用@validates装饰器向模型添加验证 from sqlalchemy.orm import validates class EmailAddress(Base): __tablename__ = 'address' id = Column(Integer, primary_key=True) email = Column(String) @validates('email') def validate_em

SQLAlchemy文档解释了如何使用@validates装饰器向模型添加验证

 from sqlalchemy.orm import validates

class EmailAddress(Base):
    __tablename__ = 'address'

    id = Column(Integer, primary_key=True)
    email = Column(String)

    @validates('email')
    def validate_email(self, key, address):
        assert '@' in address
        return address

我有一个有两个日期的模型,我想创建一个验证器,确保一个日期总是大于第二个日期。是否可以创建模型级验证程序?如果是,语法是什么?

下面是验证程序的一个小示例

您可以在模型声明中使用CheckConstraint。或者您可以使用@validates装饰器。但是,对于第一个参数中的每个名称,SQLAlchemy将调用这个名称

@validates('started_at', 'stopped_at')
def do_validation(self, key, field):
    return field

请检查此代码:

为什么不能验证其中一个代码并确保它满足另一个代码的要求?例如,
assert self.repeat_email==address
或类似的?这可能会起作用,但是我需要在初始化过程中解决任何问题。我更愿意为每个字段定义几个验证器,以及一个行验证器来确定字段是否创建了有效状态。将行验证放在一个地方,而不是分散在不同的字段验证器中,感觉更加明确和易于维护。
处开始和在处停止的顺序是随机的。不是随机的,而是按照传递的值的顺序。-1因为这没有讨论
进行验证的顺序。
将为两个字段中的每个字段调用,也不会显示您如何通过问题(检查一列的值是否小于另一列的值)实际实现提问者的目标。更好的答案如下: