Recentemente ho capito che di default Colonna di SQLAlchemy non funziona come mi aspetto che:Perché il valore della colonna predefinito di SQLAlchemy non è disponibile prima che venga eseguito il commit dell'oggetto?
>>> 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
voglio tmodel_instance.foo
di eguagliare 0
subito dopo di istanze di oggetti, ma sembra che il valore di default viene utilizzato solo quando si esegue INSERT
comando, e questo mi confonde davvero. Perché uno preferirebbe lo default
su server_default
? E come ottengo ciò che voglio? Devo specificare tutti gli argomenti predefiniti in __init__
? Questa sembra essere la duplicazione del codice: per cambiare il valore predefinito, devo cambiarlo due volte e mantenere l'uguaglianza dei valori - c'è un modo per evitarlo?
+1 Accetto. Non ha senso che l'atto di persistenza di un oggetto cambierà i suoi attributi. –