मेरे पास एक पाइथन एप्लिकेशन है जिसमें sqlalchemy का उपयोग करके बहुत से छोटे डेटाबेस पहुंच फ़ंक्शन हैं। मैं इन कार्यों के चारों ओर बॉयलरप्लेट सत्र हैंडलिंग कोड रखने से बचने की कोशिश कर रहा हूं।sqlalchemy फ़ंक्शंस में बॉयलरप्लेट सत्र हैंडलिंग कोड से बचें
मैं बहुत से आयोजन कि कुछ इस तरह दिखाई है:
def get_ticket_history(Session, ticket_id):
s = Session()
try:
rows = s.query(TicketHistory)\
.filter(TicketHistory.ticket_fk==ticket_id)\
.order_by(TicketHistory.id.desc()).all()
s.commit()
return rows
except:
s.rollback()
raise
finally:
s.close()
मैं इन कार्यों refactor करने के लिए कोशिश कर रहा हूँ, लेकिन यकीन नहीं मैं अभी तक का सबसे अच्छा तरीका है। मेरे पास वर्तमान में सबसे अच्छा है:
def execute(Session, fn, *args, **kwargs):
s = Session()
try:
ret = fn(s, *args, **kwargs)
s.commit()
return ret
except:
s.rollback()
raise
finally:
s.close()
def get_ticket_history(self, ticket_id):
def sql_fn(s):
return s.query(TicketHistory)\
.filter(TicketHistory.ticket_fk==ticket_id)\
.order_by(TicketHistory.id.desc()).all()
return execute(self.sentinel_session, sql_fn)
क्या ऐसा करने का बेहतर या अधिक बेवकूफ तरीका है? शायद एक सजावट का उपयोग कर?
धन्यवाद, एक संदर्भ प्रबंधक का उपयोग करने जॉन
एक 'संदर्भ प्रबंधक' जाने का एक बहुत अच्छा तरीका होगा। –