为什么在对象提交之前,SQLAlchemy的默认列值不可用?
- 论坛
- 为什么在对象提交之前,SQLAlchemy的默认列值不可用?
14 浏览
为什么在对象提交之前,SQLAlchemy的默认列值不可用?
最近我发现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__`中指定所有默认参数吗?这似乎是代码重复:更改默认值时,我必须更改两次,并保持这些值的相等性 - 有没有办法避免这种情况?