Warum ist der SQLAlchemy-Standardspaltenwert nicht verfügbar, bevor das Objekt festgeschrieben wird?

Kürzlich habe ich herausgefunden, dass SQLAlchemys Spaltenstandard nicht so funktioniert, wie ich es erwartet habe:

>>> 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

Ich willtmodel_instance.foo zu gleich0 direkt nach der Objektinstanziierung, aber es scheint, dass der Standardwert nur bei der Ausführung verwendet wirdINSERT Befehl, und es verwirrt mich wirklich. Warum sollte man das vorziehen?default Überserver_default? Und wie erreiche ich, was ich will? Soll ich alle Standardargumente in angeben?__init__? Das scheint eine Codeduplizierung zu sein: Um den Standardwert zu ändern, muss ich ihn zweimal ändern und diese Werte gleich halten - gibt es eine Möglichkeit, dies zu vermeiden?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage