2011-10-05 16 views
6

है, मैं जानना चाहता हूं कि ऑब्जेक्ट दिया गया है, अगर यह एक SQLlchemy मैप किए गए मॉडल का उदाहरण है।जांचें कि ऑब्जेक्ट एक sqlalchemy मॉडल उदाहरण

आम तौर पर, मैं isinstance (obj, घोषणात्मक आधार) का उपयोग करता हूं। हालांकि, इस परिदृश्य में, मेरे पास उपलब्ध घोषणात्मक आधार वर्ग नहीं है (क्योंकि यह एक निर्भरता परियोजना में है)।

मैं जानना चाहता हूं कि इस मामले में सबसे अच्छा अभ्यास क्या है।

class Person(DeclarativeBase): 
     __tablename__ = "Persons" 

p = Person() 

print isinstance(p, DeclarativeBase) 
#prints True 

#However in my scenario, I do not have the DeclarativeBase available 
#since the DeclarativeBase will be constructed in the depending web app 
#while my code will act as a library that will be imported into the web app 
#what are my alternatives? 
+0

कुछ और जानकारी प्रदान करें! – shahjapan

उत्तर

4

आप class_mapper() का उपयोग करें और अपवाद पकड़ कर सकते हैं।
या आप _is_mapped_class का उपयोग कर सकते हैं, लेकिन आदर्श रूप से आपको यह नहीं करना चाहिए क्योंकि यह सार्वजनिक विधि नहीं है।

from sqlalchemy.orm.util import class_mapper 
def _is_sa_mapped(cls): 
    try: 
     class_mapper(cls) 
     return True 
    except: 
     return False 
print _is_sa_mapped(MyClass) 

# @note: use this at your own risk as might be removed/renamed in the future 
from sqlalchemy.orm.util import _is_mapped_class 
print bool(_is_mapped_class(MyClass)) 
+0

धन्यवाद वैन। मेरा मूल प्रश्न ऑब्जेक्ट उदाहरण के बारे में कक्षा नहीं था। क्या मैं अपना कोड किसी ऑब्जेक्ट_मैपर पर बदल सकता हूं? – Ahmed

+0

आप हमेशा एक उदाहरण की कक्षा प्राप्त कर सकते हैं; 'प्रकार (उदाहरण)' – SingleNegationElimination

+0

निश्चित रूप से, आप object_mapper का उपयोग कर सकते हैं। या जैसा ऊपर बताया गया है, बस प्रकार प्राप्त करें। आप पर निर्भर करता है... – van

1

उदाहरण के लिए object_mapper() वहाँ है, इसलिए:

from sqlalchemy.orm.base import object_mapper 

def is_mapped(obj): 
    try: 
     object_mapper(obj) 
    except UnmappedInstanceError: 
     return False 
    return True 

पूरा नक्शाकार उपयोगिताओं यहाँ प्रलेखित रहे हैं: http://docs.sqlalchemy.org/en/rel_1_0/orm/mapping_api.html

बस एक विचार: के बाद से विशिष्ट त्रुटियों के लिए SQLAlchemy द्वारा उठाया जाता है (UnmappedClassError उदाहरण के लिए calsses और UnmappedInstanceError) सामान्य अपवाद के बजाय उन्हें क्यों नहीं पकड़ें? ;)

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