Dlaczego domyślna wartość kolumny SQLAlchemy nie jest dostępna przed zatwierdzeniem obiektu?
Ostatnio zorientowałem się, że domyślna kolumna SQLAlchemy nie działa, ponieważ oczekuję, że:
>>> 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
chcętmodel_instance.foo
równe0
tuż po wystąpieniu obiektu, ale wydaje się, że wartość domyślna jest używana tylko podczas wykonywaniaINSERT
polecenie i naprawdę mnie to myli. Dlaczego ktoś wolałbydefault
koniecserver_default
? I jak mogę osiągnąć to, czego chcę? Czy mam podać wszystkie domyślne argumenty w__init__
? Wydaje się, że jest to duplikacja kodu: aby zmienić domyślną wartość, muszę ją dwukrotnie zmienić i utrzymać te wartości równości - czy jest jakiś sposób, aby tego uniknąć?