【发布时间】:2012-12-09 18:30:26
【问题描述】:
最近我发现 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 而不是server_default?以及如何实现我想要的?我应该在__init__ 中指定所有默认参数吗?这似乎是代码重复:要更改默认值,我必须更改两次并保持这些值相等——有什么方法可以避免这种情况吗?
【问题讨论】:
-
+1 同意。持久化一个对象的行为会改变它的属性是没有意义的。
标签: python sqlalchemy default-value