Ostatnio pomyślałem, że domyślna Kolumna sqlalchemy nie działa jak mogę oczekiwać, że:Dlaczego domyślna wartość kolumny SQLAlchemy nie jest dostępna przed zatwierdzeniem obiektu?
>>> 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ówna 0
zaraz po obiekcie instancji, ale wydaje się, że domyślna wartość jest używana tylko podczas wykonywania INSERT
polecenie, a to naprawdę mnie myli. Dlaczego ktoś woli default
ponad server_default
? I jak osiągnąć to, czego chcę? Czy mam podać wszystkie domyślne argumenty w __init__
? Wydaje się, że jest to powielanie kodu: aby zmienić domyślną wartość, muszę dwukrotnie ją zmienić i zachować równość tych wartości - czy jest jakiś sposób, aby tego uniknąć?
+1 Zgadzam się. Nie ma sensu, aby akt utrzymywania obiektu zmieniał jego atrybuty. –