2010-08-16 19 views
7

मैं स्क्लेक्लेमी के लिए नया हूं। मेरे पास वर्तमान में है:SqlAlchemy: ऑब्जेक्ट बनाएं यदि पहले से मौजूद नहीं है?

ev = model.EnumerationValue(key=key_level_2, code=level_2) 
ev.keyvalues[key_parent] = level_1 
model.Session.add(ev) 

मैं इसे कैसे बदल सकता हूं ताकि यह केवल वस्तु को जोड़ सके यदि यह पहले से मौजूद नहीं है? यह अच्छा होगा ...

model.Session.create_if_does_not_exist(ev) 

धन्यवाद!

उत्तर

3

मानक पैटर्न प्रतीत होता:

ev = model.Session.query(model.EnumerationValue).filter(model.EnumerationValue.key==key_level_2).filter(model.EnumerationValue.code==level_2).count() 
if not ev: 
    ev = model.EnumerationValue(key=key_level_2, code=level_2) 
    ev.keyvalues[key_parent] = level_1 
    model.Session.add(ev) 

नहीं बहुत सुंदर (और मैं वाक्यविन्यास त्रुटियों हो सकता है - क्षमा याचना), लेकिन काम करता है।

+0

दृष्टिकोण सही लगता है, लेकिन मुझे लगता है कि कोड वास्तव में टूटा हुआ है। मेरे पास स्थानीय रूप से कुछ काम करता है जो काम करता है, लेकिन यह "ओन ट्रू सॉल्यूशन" के रूप में योग्य नहीं हो सकता है। –

+0

अपना समाधान साझा करने के लिए देखभाल? – CadentOrange

2

मुझे this recipe मिला है जबकि मेरे पास एक समान समस्या को हल करने के लिए एक पैटर्न की तलाश है। मुझे लगता है कि यह एक अच्छा और साफ हो सकता है यदि आप 'एक ट्रू' समाधान नहीं चाहते थे जो आप मूल रूप से खोज रहे थे।

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