最近我发现 SQLAlchemy 的 Column 默认值不能像我期望的那样工作:
>>> Base = declarative_base()
>>> class TestModel(Base):
... __tablename__ = 'tmodel'
... id = sa.Column(sa.Integer, primary_key=True)
... foo = sa.Column(sa.Integer, default=0)
...
>>> tmodel_instance = TestModel()
>>> print tmodel_instance.foo
None
>>> session.add(tmodel_instance)
>>> print tmodel_instance.foo
None
>>> session.commit()
>>> print tmodel_instance.foo
0
我想在对象实例化后tmodel_instance.foo
立即等于0
,但似乎默认值仅在执行INSERT
命令时使用,这真的让我感到困惑。为什么会更喜欢 default
over server_default
?以及如何实现我想要的?我应该在 中指定所有默认参数__init__
吗?这似乎是代码重复:要更改默认值,我必须更改两次并保持这些值相等——有什么方法可以避免这种情况吗?