为什么在对象提交之前,SQLAlchemy的默认列值不可用?

14 浏览
0 Comments

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

0