gpt4 book ai didi

python - SQLAlchemy:检查约束和@validates之间有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:53 25 4
gpt4 key购买 nike

在 SQLAlchemy 模型中添加 CheckConstraint 和添加 @validates 修饰的验证方法有什么区别?一个是在数据库级别起作用,另一个不是?何时使用哪个有什么指导原则吗?

具体来说,使用有什么区别

__table_args__ = (CheckConstraint('to_node_id != from_node_id'), )

@validates('from_node', 'to_node')
def validate_nodes_are_different(self, key, field):
if key == 'to_node' and field and field is self.from_node:
raise ValueError
elif key == 'from_node' and field and field is self.to_node:
raise ValueError
return field

最佳答案

CheckConstraint是数据库级别的检查; @validates 是 Python 级别的检查。数据库级别的检查更加通用;即使您通过其他方式访问数据库,该约束也得到满足。 Python 级别的检查更具表现力;您通常可以更轻松地检查复杂的约束。

您应该考虑的另一件事是当您想要更改约束时会发生什么。当您更改约束时,CHECK 约束将强制您更改现有数据以符合要求。 Python 级约束允许您仅强制新数据符合约束。

关于python - SQLAlchemy:检查约束和@validates之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com