Почему недоступно значение столбца SQLAlchemy по умолчанию до фиксации объекта?
Недавно я понял, что SQLAlchemyСтолбец по умолчанию не делаетработать так, как я ожидаю:
>>> 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__
? Это похоже на дублирование кода: чтобы изменить значение по умолчанию, мне нужно изменить его дважды и сохранить равенство этих значений - есть ли способ избежать этого?