Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SqlAlchemy टाइमस्टैम्प 'अपडेट पर' अतिरिक्त

जाहिरा तौर पर समस्या SqlAlchemy से संबंधित नहीं है बल्कि अंतर्निहित MySQL इंजन के साथ है। डिफ़ॉल्ट व्यवहार on update CURRENT_TIMESTAMP पर सेट करना है तालिका में पहले टाइमस्टैम्प कॉलम पर।

यह व्यवहार यहां के बारे में बताया गया है . जहाँ तक मैं समझता हूँ, एक संभावित समाधान यह है कि MySQL को --explicit_defaults_for_timestamp=FALSE के साथ प्रारंभ किया जाए। झंडा। दूसरा समाधान यहां पाया जा सकता है . मैंने अभी तक किसी भी समाधान का प्रयास नहीं किया है, जैसे ही मैं समस्या का समाधान करूंगा, मैं इस उत्तर को अपडेट कर दूंगा।

संपादित करें:मैंने दूसरी विधि की कोशिश की और यह बहुत आसान नहीं है लेकिन यह काम करता है। मेरे मामले में मैंने टेबल का एक सेट बनाया है जिसमें created_at . नहीं है विशेषता और फिर मैंने उपरोक्त लिंक में वर्णित सभी शेष तालिकाओं को बदल दिया है।

की तर्ज पर कुछ:

_no_alter = set(['tables', 'which', 'do not', 'have', 'a created_at', 'column'])
Base.metadata.create_all(engine)
for table in Base.metadata.tables.keys():
    if table not in _no_alter:
      engine.execute(text('ALTER TABLE {} MODIFY created_at TIMESTAMP NOT NULL DEFAULT 0'.format(table)))

EDIT2:इसे पूरा करने का एक और (आसान) तरीका है SqlAlchemy में एक server_default सेट करना कॉलम के लिए मान:

created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False, server_default=text('0'))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql से php का उपयोग करके अल्पविराम निकालें

  2. मैं अपने MySQL पासवर्ड को फिर से कैसे बना सकता हूं ताकि मैं डीबी रेक कर सकूं:रेल पर बना सकता हूं?

  3. आप समान स्तंभों वाली पंक्तियाँ कैसे खोज सकते हैं?

  4. सरणी में mysql डेटा की पंक्ति/स्तंभ कैसे स्टोर करें?

  5. MySQL में तारीख का उपयोग करके महीना कैसे प्राप्त करें