正整数的flask sqlalchemy列约束

Sea*_*lus 5 python sqlalchemy flask-sqlalchemy

如何使用flask sqlalchemy将列定义为正整数?

我希望答案看起来像这样:

class City(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    population = db.Column(db.Integer, positive=True)
    def __init__(self,population):
        self.population = population
Run Code Online (Sandbox Code Playgroud)

但是,这个类定义会抛出错误b/c sqlalchemy不知道'正面'参数.

如果对象被实例化为人口的负值,我可以引发异常.但我不知道如何确保更新后人口仍然是积极的.

谢谢你的帮助.

Sin*_*ion 17

不幸的是,在python方面,sqlalchemy尽力避开; 没有'特殊的sqlalchemy'方式来表达实例属性必须满足某些约束:

>>> class Foo(Base):
...     __tablename__ = 'foo'
...     id = Column(Integer, primary_key=True)
...     bar = Column(Integer)
...
>>> f = Foo()
>>> f.bar = "not a number!"
>>> f.bar
'not a number!'
Run Code Online (Sandbox Code Playgroud)

如果您尝试提交此对象,sqlalchey 抱怨,因为它不知道如何将提供的python值呈现为列类型的SQL Integer.

如果那不是你想要的,你只是想确保坏数据没有到达数据库,那么你需要一个Check约束.

class Foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, primary_key=True)
    bar = Column(Integer)
    __table_args__ = (
        CheckConstraint(bar >= 0, name='check_bar_positive'),
        {})
Run Code Online (Sandbox Code Playgroud)

  • `bar >= 0` 应该被称为 `check_bar_non_negative`。对于“check_bar_positive”,我期望“bar > 0” (2认同)