有没有办法在 slqalchemy 中指定整数列的最小值和最大值?

问题描述 投票:0回答:2

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 文档说创建列时没有要传递的此类属性

python sqlalchemy integer max min
2个回答
4
投票

brunsonanswer中所述,如果数据库支持检查约束,您可以添加检查约束来在数据库中执行验证。

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

0
投票

这可能是因为我熟悉的 RDBMS 都不支持列定义中的最小值/最大值。

如果您需要强制可以编写触发器,或者如果您的数据库支持它,您可以添加检查约束。

https://dev.mysql.com/blog-archive/mysql-8-0-16-introducing-check-constraint/

© www.soinside.com 2019 - 2024. All rights reserved.