我如何使用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

但是,此类定义将引发错误b/c sqlalchemy不知道“正”参数。

如果将对象实例化为具有负值的填充,则可能会引发异常。但我不知道如何确保人口在更新后仍保持正数。

谢谢你的帮助。

最佳答案

不幸的是,在python方面,sqlalchemy竭尽所能。没有“特殊的sqlalchemy”方式来表示instance属性必须满足一些约束:

>>> 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!'

如果您尝试提交此对象,则sqlalchey会提示,因为它不知道如何将所提供的python值呈现为sql类型列Integer的SQL。

如果这不是您要查找的内容,则只想确保不良数据不会到达数据库,那么您需要一个Check约束。
class Foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, primary_key=True)
    bar = Column(Integer)
    __table_args__ = (
        CheckConstraint(bar >= 0, name='check_bar_positive'),
        {})

关于python - 带正整数的flask sqlalchemy列约束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14225998/

10-12 16:37