2012-06-04 11 views
11

तो, sqlalchemy के साथ प्रयोग और सीखना।मॉडल और इंस्टेंस विधियों: सत्र जागरूक (sqlalchemy)

मेरे पास एक उदाहरण है, मुझे एक मूल्य प्राप्त करने की आवश्यकता है। यदि वह मान मौजूद है, तो इसे वापस करें। यदि गणना नहीं है और इसे वापस कर दें।

अनिवार्य रूप से कोई कहेंगे कि 'आप इसे गलत कर रहे हैं' और सुधार पर इनपुट सामान्य रूप से सराहना की जाती है। हालांकि मैं देख रहा हूं कि मैं सत्र को प्रबंधित करने के बिना स्पष्ट रूप से ऐसा कैसे कर सकता हूं, क्योंकि जो मैं काम कर रहा हूं वह बढ़ने लग रहा है, और जब मैं एक उदाहरण अपडेट करना चाहता हूं तो लगातार सत्र का प्रबंधन करना समस्याग्रस्त है। यह मुझे लगता है कि मैं इसे पूर्वाह्न वास्तव में गलत कर रहा हूं।

तो मैं सत्र को स्पष्ट रूप से प्रबंधित न करने के लिए नीचे दी गई विधि को कैसे ठीक करूं?

def method(self, session): 
     if self.i_needed_this is None: 
      self.i_needed_this = calculate(calcutron) 
      session.add(self) 
      session.commit() 
      return self.i_needed_this       
     else: 
      return self.i_needed_this 

हो सकता है कि इस सवाल का 'उदाहरणों सत्र बारे में पता तो मैं हमेशा स्पष्ट रूप से इसे नहीं प्रबंध कर रहा हूँ बनाने' शीर्षक से किया जाना चाहिए, और अगर यह एक मूक सवाल है, कम से कम मुझे क्यों उदाहरण के साथ दिखाने के लिए और जहाँ दूसरों के लिए मुझे बात बेहतर पूछा।

संपादित करें: स्पष्ट रूप से, सत्र का आयात मैं काम का उपयोग कर रहा हूं, और यह उपलब्ध है, इसलिए शायद यह एक गैर समस्या या भविष्य के लिए एक है जब मैं sqlalchemy के साथ अधिक कुशल हूं।

उत्तर

21

आपका प्रश्न है, तो आम है कि यह करने के लिए इस सवाल का जवाब एसए दस्तावेज की Session Frequently Asked Questions में है:

  • कैसे मैं किसी विशेष वस्तु के लिए सत्र मिल सकता है? सत्र पर object_session() classmethod उपलब्ध का उपयोग करें:
    session = Session.object_session(someobject)

हालांकि, यह मान लिया गया है वस्तु लगातार है और या तो नया है (लेकिन पहले से ही एक सत्र में जोड़े) या एक सत्र के लिए बाध्य। आपके नमूना कोड में ऑब्जेक्ट को सत्र में जोड़ने के लिए तर्क शामिल है, इसलिए मेरी धारणा इस मामले में सच नहीं हो सकती है।

+0

मैंने पाया कि साथ ही एक मैं इसे फिर से पढ़ता हूं, मैं वास्तव में अपने मॉडल में एक सत्र को एकीकृत करने का एक बेहतर तरीका ढूंढ रहा था और इससे मदद मिलती है। – blueblank

6

How can I get the Session for a certain object? देखें:

from sqlalchemy import inspect 
# ... 
# within instance method 
session = inspect(self).session 
  • या object_session() विधि:

    • आप एसए क्रम निरीक्षण एपीआई का उपयोग कर सकते हैं

      from sqlalchemy.orm.session import Session 
      # ... 
      # within instance method 
      session = Session.object_session(self) 
      
  • +3

    क्या कोई इन दोनों के बीच अंतर को समझा सकता है? – smilledge

    +0

    वें उत्तर की शुरुआत में लिंक सीधे SQLAlchemy के लिए प्रलेखन पर जाता है। – boatcoder

    संबंधित मुद्दे