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