मेरे पास एक टेबल परिभाषित है जैसे:

class Thing(Base):
    __tablename__ = "things"

    my_field = Column(Text, nullable=True, default=lambda c: "default")

(मेरे वास्तविक कार्यान्वयन में डिफ़ॉल्ट फ़ंक्शन अधिक जटिल है, लेकिन मैंने यह कहना उचित समझा कि मैं डिफ़ॉल्ट मान उत्पन्न करने के लिए फ़ंक्शन का उपयोग कर रहा हूं।)

मैं कुछ मामलों में my_field से NULL के मान को स्पष्ट रूप से सेट करने में सक्षम होना चाहता हूं। मैने प्रयत्न किया:

thing = Thing(my_field=None)

लेकिन Session.add(thing); Session.commit() पर डिफ़ॉल्ट मान फ़ंक्शन द्वारा उत्पन्न होता है और मेरे स्पष्ट None पर लिखता है। क्या सामान्य रूप से डिफ़ॉल्ट का उपयोग करने का कोई तरीका है लेकिन कभी-कभी कॉलम के लिए स्पष्ट रूप से शून्य सेट करें?

1
Alex 14 अप्रैल 2020, 18:07

1 उत्तर

सबसे बढ़िया उत्तर

यह SQLAlchemy ORM में एक विचित्रता के कारण है। भले ही आप डिफ़ॉल्ट रूप से एक कॉलम पर मान को None पर स्पष्ट रूप से सेट करते हैं, यह माना जाता है कि कोई मान सेट नहीं किया गया था। इस समस्या को हल करने के लिए आपको null SQL निर्माण का उपयोग करने की आवश्यकता है। देखें फोर्सिंग अधिक विवरण के लिए डिफ़ॉल्ट वाले कॉलम पर NULL।

from sqlalchemy import null

thing = Thing(my_field=null())
2
benvc 14 अप्रैल 2020, 15:57