class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
age = Column(Integer) # I need age to have min value of 0 and max of 100
email = Column(String)
SQLAlchemy 文档说创建列时没有要传递的此类属性
如brunson的answer中所述,如果数据库支持检查约束,您可以添加检查约束来在数据库中执行验证。
import sqlalchemy as sa
...
class Test(Base):
__tablename__ = 'test'
id = sa.Column(sa.Integer, primary_key=True)
age = sa.Column(sa.Integer, sa.CheckConstraint('age > 0 AND age < 100'))
在应用层将数据发送到数据库之前执行验证可能会更方便。在这种情况下,可以使用 orm.validates 装饰器:
class Test(Base):
__tablename__ = 'test'
id = sa.Column(sa.Integer, primary_key=True)
age = sa.Column(sa.Integer, sa.CheckConstraint('age > 0 AND age < 100'))
@orm.validates('age')
def validate_age(self, key, value):
if not 0 < value < 100:
raise ValueError(f'Invalid age {value}')
return value
这可能是因为我熟悉的 RDBMS 都不支持列定义中的最小值/最大值。
如果您需要强制可以编写触发器,或者如果您的数据库支持它,您可以添加检查约束。
https://dev.mysql.com/blog-archive/mysql-8-0-16-introducing-check-constraint/