हाल ही में मैं पता लगा कि SQLAlchemy स्तम्भ डिफ़ॉल्ट के रूप में मैं इसे करने की उम्मीद काम नहीं करता:ऑब्जेक्ट प्रतिबद्ध होने से पहले SQLAlchemy डिफ़ॉल्ट कॉलम मान क्यों उपलब्ध नहीं है?
>>> 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__
में सभी डिफ़ॉल्ट तर्क निर्दिष्ट करना है? ऐसा लगता है कि कोड डुप्लिकेशंस है: डिफ़ॉल्ट मान बदलने के लिए मुझे इसे दो बार बदलना है और उन मानों को समानता बनाए रखना है - क्या इससे बचने का कोई तरीका है?
+1 सहमत हूँ। यह समझ में नहीं आता है कि किसी ऑब्जेक्ट को बनाए रखने का कार्य इसके गुणों को बदल देगा। –